#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010, MOD = 998244353;
int n,m,a,b;
int g[N][N];
int rmx[N][N],rmn[N][N];
int tmp[N],cmx[N],cmn[N];
int q[N];
void get_max(int a[],int b[],int tot,int k){
int ht = 0, rr = -1;
for(int i=1;i<=tot;i++){
if(ht<=rr && i-q[ht]+1>k) ht ++;
while(ht<=rr && a[q[rr]]<=a[i]) rr --;
q[++rr] = i;
if(i>=k) b[i] = a[q[ht]];
}
}
void get_min(int a[],int b[],int tot,int k){
int ht = 0, rr = -1;
for(int i=1;i<=tot;i++){
if(ht<=rr && i-q[ht]+1>k) ht ++;
while(ht<=rr && a[q[rr]]>=a[i]) rr --;
q[++rr] = i;
if(i>=k) b[i] = a[q[ht]];
}
}
int main()
{
cin >> n >> m >> a >> b;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> g[i][j];
}
}
// 先处理行
for(int i=1;i<=n;i++){
get_max(g[i],rmx[i],m,b);
get_min(g[i],rmn[i],m,b);
}
int res = 0;
// 再处理列
for(int j=b;j<=m;j++){
for(int i=1;i<=n;i++) tmp[i] = rmx[i][j];
get_max(tmp,cmx,n,a);
for(int i=1;i<=n;i++) tmp[i] = rmn[i][j];
get_min(tmp,cmn,n,a);
// 对列进行加
for(int i=a;i<=n;i++) res = (res + (long long)cmx[i] * cmn[i]) % MOD;
}
cout << res << endl;
return 0;
}