/*
TASK: tre
LANG: C++
*/
//Iordan Boev SMG
# include <stdio.h>
# define MAXD (1<<7)
# define MAXL (1<<17)
# define maxx(a,b) (a) < (b) ? (b) : (a)

int last,r;
int n,k,l,d;
int table[MAXD][MAXL];
struct mem {
  int d,time;;  
} data[MAXD][MAXL];
int max[MAXL];

void read() {
    int a;
    scanf("%d %d %d %d", &n,&k,&l,&d);
    for(int i = 1; i <= d; i++) {
        for(int j = 1; j <= l; j++) {
            scanf("%d", &a);
            table[i][j] = table[i-1][j]+a;
        }   
    }
    last = 0;   
}

int calc(int p) {
    if(max[p] == 0) {
         r = last;
         return max[r];
    } else {
         r = p; 
         return max[p];
    }    
}

void work() {
    for(int j = 1; j <= l; j++) {
        for(int i = 1; i <= d; i++) {
            //smqtame data[i][j]
            if(table[i][j] < table[i-1][j]) {
                 data[i][j].d = data[i-1][j].d;
                 data[i][j].time = data[i-1][j].time;   
                    
            } else {
                if(table[i][j] > 0) {
                    if(k-data[i-1][j].time < i) {
                        data[i][j].d = data[i-1][j].d;
                        data[i][j].time = data[i-1][j].time;   
                        
                    }
                    if(data[i-1][j].d < table[i][j]+calc(k-i)) {
                        data[i][j].d = table[i][j]+calc(k-i);
                        data[i][j].time = i+r;   
                    } else {
                        data[i][j].d = data[i-1][j].d;
                        data[i][j].time = data[i-1][j].time;   
                    }                    
                    
                } else {
                    data[i][j].d = data[i-1][j].d;
                    data[i][j].time = data[i-1][j].time;
                }           
            }
        }
        data[0][j+1].d = data[d][j].d;
        data[0][j+1].time = data[d][j].time;
        for(int q = 1; q <= d; q++) {
            max[data[q][j].time] = maxx(max[data[q][j].time],data[q][j].d);   
        }                  
    }
    /*for(int i = 1; i <= d; i++) {
        for(int j = 1; j <= l; j++) {
            printf("(%d %d)  ", data[i][j].d,data[i][j].time);   
        }
        printf("\n");   
    }*/
}

int main() {
    read();   
    work();
    printf("%d\n", data[d][l].d);
    return 0;
}
