#include <fstream>
#include<algorithm>
#include <cstring>
#define DIM 600
using namespace std;
ifstream fin ("elimin.in" );
ofstream fout("elimin.out");
int N, M, i, j, K, L, C, V[DIM], W[DIM], maxim;
int A[DIM][DIM], B[DIM][DIM]; int aux, sum, T[DIM];
void Rotate(){
for(i = 1; i <= N; i ++)
for(j = 1; j <= M; j ++)
B[j][N-i+1] = A[i][j];
memcpy(A, B, sizeof(A));
return;
}
void SetUp(){
fin >> N >> M >> L >> C;
for(i = 1; i <= N; i ++)
for(j = 1; j <= M; j ++)
fin >> A[i][j];
if(N > M){
Rotate();
aux = N;
N = M;
M = aux;
aux = L;
L = C;
C = aux;
}
for(j = 1; j <= M; j ++)
for(i = 1; i <= N; i ++)
V[j] += A[i][j];
return;
}
void Sol(){
int j; int i;
for(j = 1; j <= M; j ++)
W[j] = V[j];
for(i = 1; i <= L; i ++){
for(j = 1; j <= M; j ++)
W[j] -= A[T[i]][j];
}
sort(W + 1, W + M + 1);
sum = 0;
for(j = M; j > C; j --)
sum += W[j];
if(sum > maxim)
maxim = sum;
return;
}
void Back(int l){
if(l == L + 1)
Sol();
else{
for(int i = T[l-1] + 1; i <= N - (L - l); i ++){
T[l] = i;
Back(l + 1);
T[l] = 0;
}
}
return;
}
void Finish(){
fout << maxim;
return;
}
int main(){
SetUp();
Back(1);
Finish();
return 0;
}