/*
TASK:tre
LANG:C++
*/

#include<cstdio>


struct sss{
    int a,b,c;}
syk[1001];
int inds;
int mat[10002][3],N,K,L,D;
char vze[1001];
int maxx;

void input() {
    scanf("%d%d%d%d", &N, &K, &L, &D);
    for(int i=0;i<D;i++) {
        for(int j=0;j<L;j++) {
            int num;
            scanf("%d",&num);
            mat[j][0]+=num;
            mat[j][1]++;
            if(mat[j][0]>0) {syk[inds].a=mat[j][0];syk[inds].b=mat[j][1];syk[inds++].c=mat[j][2]-1;
            mat[j][0]=0;mat[j][1]=0;mat[j][2]=inds;}
        }
    }
}

bool cmp(sss m, sss n) {
    return (m.a>n.a||(m.a==n.a&&m.b<n.b));
}
void solve(int tmax, int tK) {
 if(tmax>maxx) maxx=tmax;
 for(int i=0;i<inds;i++)
    if(syk[i].c==-1&&vze[i]==0&&tK-syk[i].b>=0) {vze[i]=1;solve(tmax+syk[i].a,tK-syk[i].b);vze[i]=0;}
    else if(vze[i]==0&&tK-syk[i].b>=0&&vze[syk[i].c]==1) {vze[i]=1;solve(tmax+syk[i].a,tK-syk[i].b);vze[i]=0;}
}
        
    
int main() {
   input();
   solve(0,K);
   printf("%d\n",maxx);
    return 0;
}
