#include<bits/stdc++.h>
using namespace std;
const int maxn=500+11;
int n,m;
int d[8][2]={{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}};
int a[maxn][maxn];
bool vis[maxn][maxn];
struct node{
int mx;int my;int cnt;
node(int xx,int yy,int cc)
{
mx=xx;my=yy;cnt=cc;
}
};
queue<node> q;
void bfs(int x,int y)
{
q.push(node(x,y,0));vis[x][y]=true;
while(!q.empty())
{
node nd=q.front();q.pop();
for(int i=0;i<8;i++)
{
int dx=nd.mx+d[i][0];
int dy=nd.my+d[i][1];
if(dx<=0||dy<=0||dx>n||dy>m||vis[dx][dy])continue;
vis[dx][dy]=true;
a[dx][dy]=nd.cnt+1;
q.push(node(dx,dy,nd.cnt+1));
}
}
return ;
}
int main()
{
int x,y;
scanf("%d %d %d %d",&n,&m,&x,&y);
bfs(x,y);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]==0&&(i!=x&&j!=y))printf("-1 ");
else printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}