#!/usr/bin/env python3
from collections import defaultdict,deque
from heapq import heappush, heappop
from bisect import bisect_left, bisect_right
import sys, random, itertools, math
sys.setrecursionlimit(10**5)
input = sys.stdin.readline
sqrt = math.sqrt
def LI(): return list(map(int, input().split()))
def LF(): return list(map(float, input().split()))
def LI_(): return list(map(lambda x: int(x)-1, input().split()))
def II(): return int(input())
def IF(): return float(input())
def LS(): return list(map(list, input().split()))
def S(): return list(input().rstrip())
def IR(n): return [II() for _ in range(n)]
def LIR(n): return [LI() for _ in range(n)]
def FR(n): return [IF() for _ in range(n)]
def LFR(n): return [LI() for _ in range(n)]
def LIR_(n): return [LI_() for _ in range(n)]
def SR(n): return [S() for _ in range(n)]
def LSR(n): return [LS() for _ in range(n)]
mod = 1000000007
inf = 1e10

#solve
def solve():
    h, w, a, b = LI()
    ans = [0,1]
    for y in range(h):
        for x in range(w):
            i = (x < a) ^ (y >= b)
            print(ans[i], end="")
        print()
    return


#main
if __name__ == '__main__':
    solve() from collections import defaultdict,deque from heapq import heappush, heappop from bisect import bisect_left, bisect_right import sys, random, itertools, math sys random itertools math sys.setrecursionlimit(10**5) sys.setrecursionlimit sys setrecursionlimit 10**5 10 5 input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline sqrt = math.sqrt sqrt math.sqrt math sqrt def LI(): return list(map(int, input().split())) LI def LF(): return list(map(float, input().split())) LF def LI_(): return list(map(lambda x: int(x)-1, input().split())) LI_ def II(): return int(input()) II def IF(): return float(input()) IF def LS(): return list(map(list, input().split())) LS def S(): return list(input().rstrip()) S II() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) II() II def IR(n): return [II() for _ in range(n)] IR n n LI() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) LI() LI def LIR(n): return [LI() for _ in range(n)] LIR n n IF() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) IF() IF def FR(n): return [IF() for _ in range(n)] FR n n LI() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) LI() LI def LFR(n): return [LI() for _ in range(n)] LFR n n LI_() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) LI_() LI_ def LIR_(n): return [LI_() for _ in range(n)] LIR_ n n S() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) S() S def SR(n): return [S() for _ in range(n)] SR n n LS() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) LS() LS def LSR(n): return [LS() for _ in range(n)] LSR n n mod = 1000000007 mod 1000000007 inf = 1e10 inf 1e10 def solve():
    h, w, a, b = LI()
    ans = [0,1]
    for y in range(h):
        for x in range(w):
            i = (x < a) ^ (y >= b)
            print(ans[i], end="")
        print()
    return


#main solve h, w, a, b = LI() h LI() LI w a b ans = [0,1] ans [0,1] 0 1 for y in range(h):
        for x in range(w):
            i = (x < a) ^ (y >= b)
            print(ans[i], end="")
        print()
     y range(h) range h for x in range(w):
            i = (x < a) ^ (y >= b)
            print(ans[i], end="")
         x range(w) range w i = (x < a) ^ (y >= b) i (x < a) ^ (y >= b) x < a x a y >= b y b print(ans[i], end="") print ans[i] ans i end="" end "" print() print return if __name__ == '__main__':
    solve() __name__ == '__main__' __name__ '__main__' solve() solve def LS(): return list(map(list, input().split())) def LS(): return list(map(list, input().split())) LS def LIR(n): return [LI() for _ in range(n)] def LIR(n): return [LI() for _ in range(n)] LIR def solve():
    h, w, a, b = LI()
    ans = [0,1]
    for y in range(h):
        for x in range(w):
            i = (x < a) ^ (y >= b)
            print(ans[i], end="")
        print()
    return


#main def solve():
    h, w, a, b = LI()
    ans = [0,1]
    for y in range(h):
        for x in range(w):
            i = (x < a) ^ (y >= b)
            print(ans[i], end="")
        print()
    return


#main solve def LSR(n): return [LS() for _ in range(n)] def LSR(n): return [LS() for _ in range(n)] LSR sqrt = math.sqrt math.sqrt sqrt def S(): return list(input().rstrip()) def S(): return list(input().rstrip()) S mod = 1000000007 1000000007 mod def IR(n): return [II() for _ in range(n)] def IR(n): return [II() for _ in range(n)] IR def LI(): return list(map(int, input().split())) def LI(): return list(map(int, input().split())) LI def IF(): return float(input()) def IF(): return float(input()) IF def SR(n): return [S() for _ in range(n)] def SR(n): return [S() for _ in range(n)] SR def LIR_(n): return [LI_() for _ in range(n)] def LIR_(n): return [LI_() for _ in range(n)] LIR_ input = sys.stdin.readline sys.stdin.readline input def LFR(n): return [LI() for _ in range(n)] def LFR(n): return [LI() for _ in range(n)] LFR inf = 1e10 1e10 inf def LF(): return list(map(float, input().split())) def LF(): return list(map(float, input().split())) LF def FR(n): return [IF() for _ in range(n)] def FR(n): return [IF() for _ in range(n)] FR def LI_(): return list(map(lambda x: int(x)-1, input().split())) def LI_(): return list(map(lambda x: int(x)-1, input().split())) LI_ def II(): return int(input()) def II(): return int(input()) II
#!/usr/bin/env python3
from collections import defaultdict,deque
from heapq import heappush, heappop
from bisect import bisect_left, bisect_right
import sys, random, itertools, math
sys.setrecursionlimit(10**5)
input = sys.stdin.readline
sqrt = math.sqrt
def LI(): return list(map(int, input().split()))
def LF(): return list(map(float, input().split()))
def LI_(): return list(map(lambda x: int(x)-1, input().split()))
def II(): return int(input())
def IF(): return float(input())
def LS(): return list(map(list, input().split()))
def S(): return list(input().rstrip())
def IR(n): return [II() for _ in range(n)]
def LIR(n): return [LI() for _ in range(n)]
def FR(n): return [IF() for _ in range(n)]
def LFR(n): return [LI() for _ in range(n)]
def LIR_(n): return [LI_() for _ in range(n)]
def SR(n): return [S() for _ in range(n)]
def LSR(n): return [LS() for _ in range(n)]
mod = 1000000007
inf = 1e10

#solve
def solve():
    h, w, a, b = LI()
    ans = [0,1]
    for y in range(h):
        for x in range(w):
            i = (x < a) ^ (y >= b)
            print(ans[i], end="")
        print()
    return


#main
if __name__ == '__main__':
    solve()
