#include <fstream>
#include <stdlib.h>
#include <algorithm>
using namespace std;
void elimin(int k, int p, int n, int v[], int pp, int **a, int &maxx) {
int i, j, b[n + 1];
for(j = 1; j <= n; j ++) {
if(pp == 1) {
b[j] = a[j][0];
} else {
b[j] = a[0][j];
}
}
for(i = 1; i <= k; i ++) {
for(j = 1; j <= n; j ++) {
if (pp == 1) {
b[j] -= a[j][v[i]];
} else {
b[j] -= a[v[i]][j];
}
}
}
int sum = 0;
for(j = 1; j <= n; j ++) {
sum += b[j];
}
sort(b + 1, b + n + 1);
for(i = 1; i <= p; i++) {
sum -= b[i];
}
if(sum > maxx) {
maxx = sum;
}
}
void bkt(int i, int k, int n, int v[], int pp, int **a, int numarDeParcurs, int numarCerutNou, int &maxx)
{
int j;
for(j = 1; j <= n; j ++)
{
v[i] = j;
if(i <= 1 || v[i] > v[i - 1]) {
if (i == k) {
elimin(k, numarCerutNou, numarDeParcurs, v, pp, a, maxx);
} else {
bkt(i + 1, k, n, v, pp, a, numarDeParcurs, numarCerutNou, maxx);
}
}
}
}
int **init(int n, int m) {
int **a = (int **) malloc((m + 1) * sizeof(int*));
int i;
for(i = 0; i <= m; i ++) {
a[i] = (int *) malloc((n+1) * sizeof(int));
a[i][0] = 0;
}
for(i = 0; i <= n; i ++) {
a[0][i] = 0;
}
return a;
}
void afisare(int n, int m, int **a) {
int i, j;
for(i = 0; i <= m; i ++) {
for(j = 0; j <= n; j ++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
}
int main()
{
FILE *in = fopen("elimin.in", "r");
FILE *out = fopen("elimin.out", "w");
int m, n, r, c;
fscanf(in, "%d %d %d %d", &m, &n, &r, &c);
int i, j;
int **a = init(n, m);
for(i = 1; i <= m; i ++) {
for(j = 1; j <= n; j ++) {
fscanf(in, "%d", &a[i][j]);
a[i][0] += a[i][j];
a[0][j] += a[i][j];
}
}
int sum = 0;
if(n < m) {
int v[c + 1];
bkt(1, c, n, v, 1, a, m, r, sum);
} else {
int v[r + 1];
bkt(1, r, m, v, 2, a, n, c, sum);
}
fprintf(out, "%d", sum);
return 0;
}