{
TASK:tre
LANG:PASCAL
}

type
  Matrix = array[1..10001,1..100] of Int64;
  Masiv = array[1..1000000] of Int64;

var
  a:  Matrix;
  Pech,cost,kol: Masiv;
  vis: array[1..1000000] of Boolean;
  N,K,L,D,M: Int64;
  Max: Int64;
  i,j,p: LongInt;


procedure Input;

begin
  readln(n,k,l,d);
  for i:= 1 to l do
  begin
    for j:= 1 to d do
      read(a[i,j]);
    readln;
  end;
end;

procedure Solve;

begin
  m:= 0;
  for i:= 1 to l do
  begin
    if a[1,i] > 0 then
    begin
      m:= m+1;
      pech[m]:= a[1,i];
      cost[m]:= 1;
      kol[m]:= i;
    end;
  end;

  for i:= 2 to D do
    for j:= 1 to L do
    begin
      a[i,j]:= a[i-1,j] + a[i,j];
      if a[i,j] > 0 then
      begin
        m:= m+1;
        pech[m]:= a[i,j];
        cost[m]:= i;
        kol[m]:= j;
      end;
    end;
end;

procedure FindMax(i,tekcost,tekpech: Int64);
var
  j: LongInt;

begin
  vis[kol[i]]:= true;
  if (tekcost <= k) and (tekpech > max) then
    max:= tekpech;
  for j:= i+1 to m do
    if (not vis[kol[j]]) and (tekcost+cost[j] <= k) then
    begin
      FindMax(j,tekcost+cost[j],tekpech+pech[j]);
      vis[kol[j]]:= false;
    end;
end;


begin
  Input;
  Solve;
  max:= 0;
  for i:= 1 to m do
    vis[i]:= false;
  for p:= 1 to m do
  begin
    if cost[p] <= k then
      FindMax(p,cost[p],pech[p]);
    vis[kol[p]]:= false;
  end;
  writeln(max);
end.
