/*
TASK: tre
LANG: C
*/

#include <stdio.h>

#define _MAX_K 10010
#define _MAX_D 110
#define _MAX_L 10010

int n;
int k;
int l;
int d;
int max;
int r[_MAX_K];
int a[_MAX_D][_MAX_L];
int b[_MAX_D][_MAX_L];

void print(int d, int l, int a[_MAX_D][_MAX_L])
{
	int i; int j;
	for (i = 0; i <= d; i++)
	{
		for (j = 0; j <= l; j++)
			printf("%d ", a[i][j]);
		printf("\n");
	}
}

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

void solve()
{
	if (k == 0) { printf("0\n"); return; }
	int i; int j; int current; int count;
	for (i = 0; i <= l; i++)
		if (r[0] < a[0][i]) r[0] = a[0][i];
	for (i = 0; i <= l; i++)
		b[0][i] = a[0][i];
	for (i = 1; i <= l; i++)
	{
		count = 0;
		for (j = 1; j <= d; j++)
		{
			b[j][i] = b[j - 1][i] + a[j][i];
			if (r[count] < b[j][i])
				r[count] = b[j][i];
			count++;
			if (count == k) break;
		}
	}
	//print(d, l, b);
	//printf("\n");
	/*
	for (i = 1; i <= l; i++)
	{
		count = 0;
		for (j = 1; j <= d; j++)
		{
			if (b[i][j] < b[i - 1][j] + a[i][j])
				b[i][j] = b[i - 1][j] + a[i][j];
			if (r[count] < b[i][j])
				r[count] = b[i][j];
			count++;
			if (count == k) break;
		}
	}
	*/
	//print(d, l, b);
	printf("%d\n", r[k - 1]);
}

int main(void)
{
	init();
	solve();
	
    return 0;
}
