/*
#include <stdio.h>
int main()
{
int n, i, j, x, y, k=1;
int a[101][101]= {};
scanf("%d", &n);
scanf("%d %d", &x, &y);
a[x][y]=1;
for(j=y-1; j>=1; j--)
{
a[x][j] = a[x][j+1]+1;
}
for(i=y+1; i<=n; i++)
{
a[x][i]=a[x][i-1]+1;
}
for(i=x-1; i>=1; i--)
{
for(j=1; j<=n; j++)
{
a[i][j]=a[i+1][j]+1;
}
}
for(i=x+1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
a[i][j]=a[i-1][j]+1;
}
a[i][y]=a[i-1][y]+1;
}
//출력하기
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
*/
//1. 첫째 행에 m, n, x, y가 빈칸으로 구분되어 주어진다.
//(단, 3 ≤ m ≤ 100, 3 ≤ n ≤ 100, 1 ≤ x ≤ m, 1 ≤ y ≤ n)
//2. 둘째 행부터 각 칸의 비옥도(k)가 빈칸과 줄 바꿈으로
//구분되어 차례대로 한 줄씩 m×n 개만큼 주어진다.
#include<stdio.h>
int main(){
int n, m, x, y, i, j,c,d;
int sum=0, max=0;
int a[101][101]={};
scanf("%d %d %d %d", &m, &n, &x, &y);
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
scanf("%d", &a[i][j]);
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
// a[i][j]에서 시작해서 2*2칸의 비옥도 합 구하기
sum=0;
for(c=i;c<=i+(x-1);c++){
for(d=j;d<=j+(y-1);d++){
a[c][d]+=sum;
}
}
if(sum>max){
max=sum;
}
}
}
printf("%d",sum);
return 0;
}