#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][105],vis[105][105],dx[8],dy[8],ans[105][105];
struct node{
int x,y;
};
queue<node> q;
void bfs(int x,int y){
vis[x][y]=1;
q.push({x,y});
while(!q.empty()){
int tx=q.front().x,ty=q.front().y;
for(int i=0;i<=7;i++){
int x=tx+dx[i],y=ty+dy[i];
if(x>=1&&x<=n&&y>=1&&y<=m&&(a[x][y]==1||a[x][y]==4)&&!vis[x][y]){
ans[x][y]=ans[tx][ty]+1;
if(a[x][y]==4){
cout<<ans[x][y];
return ;
}
vis[x][y]=1;
q.push({x,y});
}
}
q.pop();
}
}
int main(){
int m1,m2,x,y;
cin>>n>>m>>m1>>m2;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==3){
x=i;
y=j;
}
}
}
dx[0]=-m1,dx[1]=-m2,dx[2]=m2,dx[3]=m1,dx[4]=m1,dx[5]=-m2,dx[6]=-m2,dx[7]=-m1;
dy[0]=m2,dy[1]=m1,dy[2]=m1,dy[3]=m2,dy[4]=-m2,dy[5]=m1,dy[6]=-m1,dy[7]=-m2;
bfs(x,y);
return 0;
}