using namespace std;
long long m,n,m1,m2,c[1999][1999],wz1,wz2,wz3,wz4,vis[1999][1999],xd[9],yd[9];
//struct p{
// int ;
//};
//queue <p > q;
void dfs(int aa,int bb,int bs){
vis[aa][bb]=1;
if(aa==wz3&&bb==wz4){
cout<<bs;
return ;
}
for(int i=1;i<=8;i++){
int xss=aa+xd[i],yss=bb+yd[i];
if(xss>=0&&xss<m&&yss>=0&&yss<n&&!vis[xss][yss]){
vis[xss][yss]=1;
dfs(xss,yss,bs+1);
}
}
}
int main(){
cin>>m>>n>>m1>>m2;
xd[1]=m1;xd[2]=m1;xd[3]=0-m1;xd[4]=0-m1;
yd[5]=m1;yd[6]=m1;yd[7]=0-m1;yd[8]=0-m1;
xd[5]=m2;xd[6]=0-m2;xd[7]=0-m2;xd[8]=m2;
yd[1]=m2;yd[2]=0-m2;yd[3]=0-m2;yd[4]=m2;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>c[i][j];
if(c[i][j]==0) vis[i][j]=1;
if(c[i][j]==2) vis[i][j]=1;
if(c[i][j]==3) {wz1=i,wz2=j;}
if(c[i][j]==4) {wz3=i,wz4=j;}
}
}
dfs(wz1,wz2,0);
return 0;
}