#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1010, mod = 998244353;
typedef long long LL;
int w[N][N];
int n, m, a, b;
int rmax[N][N], rmin[N][N];
int q[N];
void get_min(int end, int k, int a[], int b[])
{
int hh = 0, tt = -1;
for(int i = 0; i < end; i ++)
{
while(hh <= tt && i - k + 1 > q[hh]) hh ++;
while(hh <= tt && a[q[tt]] >= a[i]) tt --;
q[++ tt] = i;
b[i] = a[q[hh]];
}
}
void get_max(int end, int k, int a[], int b[])
{
int hh = 0, tt = -1;
for(int i = 0; i < end; i ++)
{
while(hh <= tt && i - k + 1 > q[hh]) hh ++;
while(hh <= tt && a[q[tt]] <= a[i]) tt --;
q[++ tt] = i;
b[i] = a[q[hh]];
}
}
int main()
{
cin >> n >> m >> a >> b;
for(int i = 0; i < n; i ++)
for(int j = 0; j < m; j ++)
scanf("%d", &w[i][j]);
for(int i = 0; i < n; i ++)
{
get_min(m, b, w[i], rmin[i]);
get_max(m, b, w[i], rmax[i]);
}
int ans = 0;
int Max[N], Min[N], c[N], d[N];
for(int i = b - 1; i < m; i ++)
{
for(int j = 0; j < n; j ++) Max[j] = rmax[j][i];
get_max(n, a, Max, c);
for(int j = 0; j < n; j ++) Min[j] = rmin[j][i];
get_min(n, a, Min, d);
for(int j = a - 1; j < n; j ++)
ans = (ans + (LL)c[j] * d[j]) % mod;
}
cout << ans % mod << endl;
return 0;
}