#include <stdio.h>
#include <string.h>
#define NMAX 1000
#define MMAX NMAX
int i,j,n,m,A[NMAX][MMAX],c,l,st[NMAX],ll[NMAX],cc[MMAX],S[MMAX],V[MMAX],SUMA_MAX;
int apare(int x, int y)
{
long i,gasit=0;
for (i=1;i<=y-1;i++)
if (st[i] == x)
{
gasit=1;
break;
}
return gasit;
}
void Quick(int li, int ls)
{
int i=li,j=ls,x=S[(li+ls)/2],y;
while (i<=j)
{
while (S[i] < x) i++;
while (S[j] > x) j--;
if (i<=j)
{
y=S[i]; S[i]=S[j]; S[j]=y;
y=V[i]; V[i]=V[j]; V[j]=y;
i++; j--;
}
}
if (li<j) Quick(li,j);
if (i<ls) Quick(i,ls);
}
void Solve1(void)
{
int i,j;
memcpy(ll,st,sizeof(st));
int sum=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (!ll[i] && !cc[j])
sum+=A[i][j];
if (sum > SUMA_MAX)
SUMA_MAX=sum;
}
void Solve2(void)
{
int i,j;
memcpy(cc,st,sizeof(st));
int sum=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (!ll[i] && !cc[j])
sum+=A[i][j];
if (sum > SUMA_MAX)
SUMA_MAX=sum;
}
void Back(int k, int idu)
{
int i;
if (k == n+1)
{
int kk=0;
for (i=1;i<=n;i++)
if (st[i] == 1)
kk++;
/* for (i=1;i<=n;i++)
printf("%d ",st[i]);
printf("\n"); */
if (kk == l && idu==0)
Solve1();
else
if (kk == l && idu==1)
Solve2();
}
else if (k<n+1)
for (i=0;i<=1;i++)
{
st[k]=i;
Back(k+1,idu);
}
}
int main()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&l,&c);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
scanf("%d",&A[i][j]);
SUMA_MAX=0;
memset(cc, 0 , sizeof(cc));
for (j=1;j<=m;j++)
{
int sum=0;
for (i=1;i<=n;i++)
sum+=A[i][j];
S[j]=sum;
V[j]=j;
}
/* for (i=1;i<=m;i++)
printf("%d ",S[i]);
printf("\n"); */
Quick(1,m);
for (i=1;i<=c;i++)
cc[V[i]]=1;
Back(1,0);
memset(ll, 0 , sizeof(ll));
for (i=1;i<=n;i++)
{
int sum=0;
for (j=1;j<=m;j++)
sum+=A[i][j];
S[i]=sum;
V[i]=i;
}
/* for (i=1;i<=m;i++)
printf("%d ",S[i]);
printf("\n"); */
Quick(1,n);
for (i=1;i<=l;i++)
ll[V[i]]=1;
Back(1,1);
printf("%d",SUMA_MAX);
fclose(stdin);
fclose(stdout);
return 0;
}