代码如下
#include <bits/stdc++.h>
#define ll int
#define llint long long
#define re register
#define Pw(a,b,m) abs(a-m)+abs(b-m)
#define rep(i,Begin,End) for(re ll i=Begin;i<=End;i++)
#define ret(i,Begin,End) for(re ll i=End;i>=Begin;i--)
#define CalcSum(x,y) (s[x-1][y]+s[x][y-1]-s[x-1][y-1]+w)
#define GetSum(xa,ya,xb,yb) s[xb][yb]-s[xa-1][yb]-s[xb][ya-1]+s[xa-1][ya-1]
using namespace std;
inline ll qread(void){
ll x=0,f=1;char ch;
while((ch=getchar())>'9'||ch<'0') if(ch=='-') f=-1;x=(ch^48);
while((ch=getchar())<='9'&&ch>='0') x*=10,x+=(ch^48);
return x*f;
}
ll a,b,n,m,w;
llint ans=1e13,W,s[541][541],sum;
int main(){
n=qread(),m=qread(),a=qread(),b=qread();
rep(i,1,n) rep(j,1,m) w=qread(),s[i][j]+=CalcSum(i,j);
rep(ibe,1,n) rep(jbe,1,m){
W=GetSum(ibe,jbe,(ibe+n)>>1,n);
if(W>=a) rep(ien,ibe,n) rep(jen,jbe,m){
sum=GetSum(ibe,jbe,ien,jen);
ans=min(ans,1ll*Pw(a,b,sum));
if(sum>a) break;
}
else ret(ien,ibe,n) ret(jen,jbe,m){
sum=GetSum(ibe,jbe,ien,jen);
ans=min(ans,1ll*Pw(a,b,sum));
if(sum<b) break;
}
}
printf("%lld",ans);
return 0;
}