#include <stdio.h>
#include <string.h>
#define MIN(x,y) ( (x) < (y) ? (x) : (y) )
#define MAX(x,y) ( (x) > (y) ? (x) : (y) )
#define NMAX 1001
int A[NMAX][18], Cc[32001], B[NMAX], V[NMAX];
int i, j, N, M, R, C, ii, S, Sum, cnt, K, Max, sc, aux;
int bit_p(int b, int poz)
{
if (b & 1<<poz) return 1;
return 0;
}
int afla_sc(int V[], int L, int X)
{
int i, ss = 0, VM = 0;
memset(Cc, 0, sizeof(Cc));
for (i = 1; i <= L; i++) Cc[V[i]]++, VM = MAX(VM, V[i]);
for (i = 1; i <= VM; i++) Cc[i] += Cc[i-1];
for (i = 1; i <= L; i++)
{
B[ Cc[V[i]] ] = V[i];
Cc[V[i]] --;
}
for (i = 1; i <= X; i++) ss += B[i];
return ss;
}
int main()
{
freopen("elimin.in", "r", stdin);
freopen("elimin.out", "w", stdout);
scanf("%d %d %d %d", &N, &M, &R, &C);
if (N >= M)
{
for (i = 0; i < N; i++)
for (j = 0; j < M; j++) scanf("%d", &A[i][j]);
}
else
{
for (i = 0; i < N; i++)
for (j = 0; j < M; j++) scanf("%d", &A[j][i]);
aux = N; N = M; M = aux;
aux = R; R = C; C = aux;
}
for (i = 0; i < (1 << M); i++)
{
cnt = 0;
for (j = 0; j < M; j++) if (bit_p(i, j)) cnt++;
if (cnt == C)
{
S = K = 0;
for (ii = 0; ii < N; ii++)
{
Sum = 0;
for (j = 0; j < M; j++)
if ( bit_p(i, j) == 0 ) Sum += A[ii][j];
V[++K] = Sum;
S += Sum;
}
sc = afla_sc(V, K, R);
Max = MAX(Max, S - sc);
}
}
printf("%d\n", Max);
return 0;
}