#include<bits/stdc++.h>
using namespace std;
int n, m, nx, ny;
int vis[405][405];
struct point {
int x, y;
} que[10005];
bool jud[405][405];
int head, tail;
int flag = 0;
int dx[] = {1, 2, 2, 1, -1, -2, -2, -1};
int dy[] = {2, 1, -1, -2, -2, -1, 1, 2};
int main() {
cin >> n >> m >> nx >> ny;
memset(vis, -1, sizeof(vis));
memset(jud, true, sizeof(jud));
vis[nx][ny] = 0;
head = 1, tail = 1;
que[1].x = nx;
que[1].y = ny;
while (head <= tail) {
int p = head;
for (int i = 0; i < 8; i++) {
int xx = que[p].x + dx[i];
int yy = que[p].y + dy[i];
if (xx >= 1 && xx <= m && yy >= 1 && yy <= n && vis[xx][yy] == -1) {
tail++;
vis[xx][yy] = vis[que[p].x][que[p].y] + 1;
que[tail].x = xx;
que[tail].y = yy;
jud[xx][yy] = false;
}
}
head++;
}
for (int a = 1; a <= n; a++) {
for (int b = 1; b <= m; b++) {
if (b == 1) cout << vis[a][b];
else cout << setw(4) << vis[a][b];
}
cout << endl;
}
return 0;
}