#include<iostream>
#include<queue>
using namespace std;
const int MAXN = 411;
int n,m,x,y;
int vis[MAXN][MAXN];
int dx[8] = {2,1,2,1,-2,-1,-2,-1};
int dy[8] = {1,2,-1,-2,-1,2,1,-2};
struct nod{
int cnt,x,y;
};
queue<nod> q;
int main(){
cin>>n>>m>>x>>y;
q.push({0,x,y});
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
vis[i][j] = -1;
while(!q.empty()){
nod u = q.front();
q.pop();
vis[u.x][u.y] = u.cnt;
for(int i = 0;i<8;i++){
if(vis[u.x+dx[i]][u.y+dy[i]] < 0 && u.x+dx[i]>0 && u.x+dx[i]<=n && u.y+dy[i]>0 && u.y+dy[i]<=m)
{
q.push({u.cnt+1,u.x+dx[i],u.y+dy[i]});
}
}
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
cout<<vis[i][j]<<" ";
}
cout<<endl;
}
}