#include <cstdio>
#include <cstring>
#define MAX 600
int M[MAX][MAX];
int m, n, r, c;
int smax;
//int V[MAX];
int S[MAX];
void sch(int x, int y)
{int aux;
aux=S[x], S[x]=S[y]; S[y]=aux;}
int pivot(int p, int q)
{
while(p<q) {
while(p<q && S[p]>=S[q]) p++;
if(p<q) sch(p, q);
while(p<q && S[p]>=S[q]) q--;
if(p<q) sch(p, q);
}
return p;
}
void sort (int p, int q)
{int k;
if(p<q) {k=pivot(p, q);
sort(p, k-1);
sort(k+1, q);
}
}
int main( void )
{
freopen("elimin.in", "r", stdin);
scanf("%d %d %d %d\n", &m, &n, &r, &c);
int i, j, aux;
if(n<=15) { for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
scanf("%d ", &M[i][j]);
}
else { for(i=1;i<=m;++i)
for(j=1;j<=n;++j)
scanf("%d ", &M[j][i]);
aux=m;
m=n;
n=aux;
aux=c;
c=r;
r=aux;
}
freopen("elimin.out", "w", stdout);
int P = 1<<n, Q= 1<< (n-1);
//int i, j;
int nr;
int s, t, stop;
for(i=0;i< P; ++i)
{
for(j=Q, stop=0, s=0, nr=0, t=1; j!=0; j>>=1, ++t)
{//if(i&j) nr++;
//if(nr>c || n-t<c-nr) { stop=1; break;}//printf("asasdfasdfsadffsda\n"); break;}
}
//showv();
if(nr!=c) stop=1;
if(!stop) {memset(S, 0, sizeof( S ) );//printf("asfsda\n");
for(j=1;j<=m;++j) //printf("* %d\n", S[j-1]))
for(t=1, nr=Q;t<=n;++t, nr>>=1)
S[j]+=M[j][t]*!(nr&i);
sort(1,m); //printf("asdfsadfsadfsdafsadfsdfsad\n");
for(j=1;j<=m-r;++j)
s+=S[j];
if(s>smax) smax=s; //printf("%d\n", s);
}
}
printf("%d\n", smax);
return 0;
}