#include<bits/stdc++.h>
using namespace std;
const int N=401;
int visited[N][N];
struct node{
int x,y;
};
int dx[8]={-2,-1,1,2,2,1,-1,-2};
int dy[8]={1,2,2,1,-1,-2,-2,-1};
int num=0;
int m[N][N];
int n,k,a,b;
int nx,ny;
queue<node> q;
node Node,top;
void BFS(int x,int y){
visited[x][y]=1;
Node.x=x;
Node.y=y;
q.push(Node);
while(!q.empty()){
top=q.front();
q.pop();
visited[top.x][top.y]=1;
for(int i=0;i<8;i++){
nx=top.x+dx[i];
ny=top.y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=k&&visited[nx][ny]==0){
Node.x=nx;
Node.y=ny;
m[nx][ny]=m[top.x][top.y]+1;
q.push(Node);
}
}
}
}
int main(){
cin>>n>>k>>a>>b;
BFS(a,b);
for(int i=1;i<=n;i++ ){
for(int j=1;j<=k;j++){
if(visited[i][j]==0)m[i][j]=-1;
cout<<left<<setw(5)<<m[i][j];
}
cout<<endl;
}
return 0;
}