#include <stdio.h>
int a[50][10000],sum,n,m,n1,m1;
int s[10000],ss[10000];
void citire(void)
{
int i,j,aux;
FILE *f=fopen("elimin.in","r");
fscanf(f,"%d %d %d %d",&n, &m, &n1, &m1);
sum=0;
if(n>m)
{
aux=n;n=m;m=aux;
aux=n1;n1=m1;m1=aux;
for(j=0;j<m;j++)
for(i=0;i<n;i++) { fscanf(f,"%d",&a[i][m-j-1]); sum+=a[i][m-j-1]; }
}
else
{
for(i=0;i<n;i++)
for(j=0;j<m;j++) { fscanf(f,"%d",&a[i][m-j-1]);sum+=a[i][m-j-1]; }
}
}
void output(int best)
{
FILE *f=fopen("elimin.out","w");
fprintf(f,"%d\n",best);
fclose(f);
}
/*
void sort (int a[],int min, int max)
{
int i,j,aux,med;
for(i=0;i<n;i++)
for(j=0;j<i;j++)
if(a[j]>a[i]) { aux=a[i];a[i]=a[j];a[j]=aux;}
}
*/
void _qsort (int HiVal, int LowVal, int *arSort)
{
int TempLow=0;
int TempHi=0;
int pivot=0;
int tmp=0;
TempLow=LowVal;
TempHi=HiVal;
pivot = arSort[(HiVal-LowVal)/2];
while(TempLow <= TempHi)
{
while(arSort[TempLow]>pivot && TempLow < HiVal) { TempLow++; }
while(arSort[TempHi]<pivot && TempHi > LowVal) { TempHi --; }
if(TempLow <= TempHi)
{
tmp = arSort[TempLow];
arSort[TempLow]=arSort[TempHi];
arSort[TempHi]=tmp;
TempLow++;
TempHi--;
}
}
if(LowVal < TempHi) _qsort(TempHi, LowVal, arSort);
if(TempLow > HiVal) _qsort(HiVal, TempLow, arSort);
}
int main(void)
{
int b[20],i,j,removed,sum0,best=-999999999,pass;
citire();
for(i=0;i<n;i++)
{
ss[i]=0;
for(j=0;j<m;j++) ss[i]+=a[i][j];
}
printf("%d %d %d %d %d\n",n,m,n1,m1,sum);
for(i=0;i<20;i++) b[i]=0;
while(b[0]<2)
{
removed=0;sum0=sum;
for(i=0;i<n;i++) if(b[i]==1) removed++;
if(removed==n1)
{
for(i=0;i<n;i++)
if(b[i]==1)
sum0-=ss[i];
if(sum0>=best)
{
for(i=0;i<m;i++)
{
s[i]=0;
for(j=0;j<n;j++) if(b[j]==0) s[i]+=a[j][i];
}
_qsort(m-1,0,s);
for(i=m-1;i>=m-m1;i--) sum0-=s[i];
if(sum0>best) best=sum0;
}
}
pass=0;
//for(i=0;i<n;i++) printf("%d ",b[i]); printf("\n");
do
{
b[n-1]++;
for(i=n-1;i>0;i--) if(b[i]>1) { b[i]=0;b[i-1]++; }
if(b[0]==2) pass=1;
removed=0;for(i=0;i<n;i++)
{
if(b[i]==1) removed++;
if(removed>n1) break;
}
if(removed==n1) pass=1;
} while (pass==0);
}
printf("%d\n",best);
output(best);
return 0;
}