# https://atcoder.jp/contests/agc038/tasks/agc038_a

# 条件を満たすものは必ず存在するのか？ 制約により存在しそう。→かならず存在する
# 条件を満たすにはどうならべたらいいのか？
# →例えば以下のようにすれば良い
# 条件を満たす行を設定する。この行をB個繰り返す。行の01を反転させて残りを埋める(片方を固定したらもう片方は独立に決定できるイメージ)

H, W, A, B = map(int, input().split())
base = '0' * A + '1' * (W - A)
fliped = '1' * A + '0' * (W - A)

for _ in range(B):
    print(base)
for _ in range(H - B):
    print(fliped) H, W, A, B = map(int, input().split()) H map(int, input().split()) map int input().split() ().split () input split W A B base = '0' * A + '1' * (W - A) base '0' * A + '1' * (W - A) '0' * A '0' A '1' * (W - A) '1' W - A W A fliped = '1' * A + '0' * (W - A) fliped '1' * A + '0' * (W - A) '1' * A '1' A '0' * (W - A) '0' W - A W A for _ in range(B):
    print(base) _ range(B) range B print(base) print base for _ in range(H - B):
    print(fliped) _ range(H - B) range H - B H B print(fliped) print fliped B = map(int, input().split()) map(int, input().split()) B fliped = '1' * A + '0' * (W - A) '1' * A + '0' * (W - A) fliped H, W, A, B = map(int, input().split()) map(int, input().split()) H W, A, B = map(int, input().split()) map(int, input().split()) W base = '0' * A + '1' * (W - A) '0' * A + '1' * (W - A) base A, B = map(int, input().split()) map(int, input().split()) A
# https://atcoder.jp/contests/agc038/tasks/agc038_a

# 条件を満たすものは必ず存在するのか？ 制約により存在しそう。→かならず存在する
# 条件を満たすにはどうならべたらいいのか？
# →例えば以下のようにすれば良い
# 条件を満たす行を設定する。この行をB個繰り返す。行の01を反転させて残りを埋める(片方を固定したらもう片方は独立に決定できるイメージ)

H, W, A, B = map(int, input().split())
base = '0' * A + '1' * (W - A)
fliped = '1' * A + '0' * (W - A)

for _ in range(B):
    print(base)
for _ in range(H - B):
    print(fliped)
