type matrix = array[1..17,1..550] of integer;
vect = array[1..550] of integer;
var fi,fo:text;
n,m,r,c,i,j,aux:longint;
sum,max:longint;
a:matrix;
v,vl:vect;
procedure part(st,dr:integer; var stst,stdr,drst,drdr:integer);
var i,j,aux,piv:longint;
begin
piv:=vl[(st+dr) div 2];
i:=st-1;
j:=dr+1;
while i<j do
begin
repeat inc(i) until vl[i]<=piv;
repeat dec(j) until vl[j]>=piv;
if i<j then
begin
aux:=vl[i];
vl[i]:=vl[j];
vl[j]:=aux;
end;
end;
stst:=st; drdr:=dr;
if i=j then
begin stdr:=j-1; drst:=i+1; end
else
begin stdr:=j; drst:=i; end;
end;
procedure sort(st,dr:integer);
var stst,stdr,drst,drdr:integer;
begin
if st<dr then
begin
part(st,dr,stst,stdr,drst,drdr);
sort(stst,stdr);
sort(drst,drdr);
end;
end;
procedure gosolve;
var i,j,k,ct:integer;
begin
for i:=1 to m do
for j:=1 to n do
inc(v[i],a[j,i]);
for i:=0 to (1 shl n) do
begin
vl:=v;
ct:=0;
for j:=1 to n do
begin
if ct>c then break;
if ((1 shl (j-1)) and i)<>0 then
begin
for k:=1 to m do
dec(vl[k],a[j,k]);
inc(ct);
end;
end;
if ct=r then
begin
sort(1,m);
sum:=0;
for k:=1 to m-r do
sum:=sum+vl[k];
if sum>max then max:=sum;
end;
end;
end;
begin
assign(fi,'elimin.in'); reset(fi);
assign(fo,'elimin.out'); rewrite(fo);
readln(fi,n,m,r,c);
if m<n then
begin
aux:=n;
n:=m;
m:=aux;
aux:=r;
r:=c;
c:=aux;
end;
for i:=1 to n do
for j:=1 to m do
read(fi,a[i,j]);
gosolve;
writeln(fo,max);
close(fi);
close(fo);
end.