import sys
sys.setrecursionlimit(100000)
n,m,x,y=map(int,input().split())
graph=[[-1]*m for _ in range(m)]
vis=[[False]*m for _ in range(m)]
graph[x-1][y-1]=0
vis[x-1][y-1]=True
delta=[(-1,-2),(-1,2),(1,-2),(1,2),(-2,-1),(-2,1),(2,1),(2,-1)]
def isok(x,y):
return 0<=x<n and 0<=y<m and not vis[x][y]
def bfs(x,y):
from collections import deque
qu=deque()
qu.append((x,y))
while qu:
x,y=qu.popleft()
for i in range(8):
nx,ny=x+delta[i][0],y+delta[i][1]
if isok(nx,ny):
qu.append((nx,ny))
vis[nx][ny]=True
graph[nx][ny]=graph[x][y]+1
for i in range(n):
for j in range(m):
bfs(i,j)
for i in range(n):
print("{:<5}{:<5}{:<5}".format(graph[i][0],graph[i][1],graph[i][2]))