import bisect
import copy
import heapq
import math
import sys
from collections import *
from functools import lru_cache
from itertools import accumulate, combinations, permutations, product
def input():
    return sys.stdin.readline()[:-1]
def ruiseki(lst):
    return [0]+list(accumulate(lst))
sys.setrecursionlimit(500000)
mod=pow(10,9)+7
al=[chr(ord('a') + i) for i in range(26)]
direction=[[1,0],[0,1],[-1,0],[0,-1]]

h,w,a,b=map(int,input().split())

lst=[[""]*w for i in range(h)]
# print(lst)

l,r=0,a

for i in range(h):
    for j in range(w):
        if l<=j<r:
            if i<b:
                lst[i][j]="0"
            else:
                lst[i][j]="1"
        else:
            if i<b:
                lst[i][j]="1"
            else:
                lst[i][j]="0"

for i in range(h):
    print("".join(lst[i])) import bisect bisect import copy copy import heapq heapq import math math import sys sys from collections import * from functools import lru_cache from itertools import accumulate, combinations, permutations, product def input():
    return sys.stdin.readline()[:-1] input return sys.stdin.readline()[:-1] sys.stdin.readline()[:-1] sys.stdin.readline() sys.stdin.readline sys.stdin sys stdin readline :-1 -1 def ruiseki(lst):
    return [0]+list(accumulate(lst)) ruiseki return [0]+list(accumulate(lst)) [0]+list(accumulate(lst)) [0] 0 list(accumulate(lst)) list accumulate(lst) accumulate lst lst lst sys.setrecursionlimit(500000) sys.setrecursionlimit sys setrecursionlimit 500000 mod=pow(10,9)+7 mod pow(10,9)+7 pow(10,9) pow 10 9 7 chr(ord('a') + i) for i in range(26) for i in range(26) i range(26) range 26 for i in range(26) chr(ord('a') + i) chr ord('a') + i ord('a') ord 'a' i al=[chr(ord('a') + i) for i in range(26)] al [chr(ord('a') + i) for i in range(26)] direction=[[1,0],[0,1],[-1,0],[0,-1]] direction [[1,0],[0,1],[-1,0],[0,-1]] [1,0] 1 0 [0,1] 0 1 [-1,0] -1 0 [0,-1] 0 -1 h,w,a,b=map(int,input().split()) h map(int,input().split()) map int input().split() ().split () input split w a b [""]*w for i in range(h) for i in range(h) i range(h) range h for i in range(h) [""]*w [""] "" w lst=[[""]*w for i in range(h)] lst [[""]*w for i in range(h)] l,r=0,a l 0 r a for i in range(h):
    for j in range(w):
        if l<=j<r:
            if i<b:
                lst[i][j]="0"
            else:
                lst[i][j]="1"
        else:
            if i<b:
                lst[i][j]="1"
            else:
                lst[i][j]="0" i range(h) range h for j in range(w):
        if l<=j<r:
            if i<b:
                lst[i][j]="0"
            else:
                lst[i][j]="1"
        else:
            if i<b:
                lst[i][j]="1"
            else:
                lst[i][j]="0" j range(w) range w if l<=j<r:
            if i<b:
                lst[i][j]="0"
            else:
                lst[i][j]="1"
        else:
            if i<b:
                lst[i][j]="1"
            else:
                lst[i][j]="0" l<=j<r l<=j l j r if i<b:
                lst[i][j]="0"
            else:
                lst[i][j]="1"
         i<b i b lst[i][j]="0" lst[i][j] [i] lst i j "0" lst[i][j]="1" lst[i][j] [i] lst i j "1" if i<b:
                lst[i][j]="1"
            else:
                lst[i][j]="0" i<b i b lst[i][j]="1" lst[i][j] [i] lst i j "1" lst[i][j]="0" lst[i][j] [i] lst i j "0" for i in range(h):
    print("".join(lst[i])) i range(h) range h print("".join(lst[i])) print "".join(lst[i]) "".join "" join lst[i] lst i def input():
    return sys.stdin.readline()[:-1] def input():
    return sys.stdin.readline()[:-1] input a,b=map(int,input().split()) map(int,input().split()) a def ruiseki(lst):
    return [0]+list(accumulate(lst)) def ruiseki(lst):
    return [0]+list(accumulate(lst)) ruiseki b=map(int,input().split()) map(int,input().split()) b h,w,a,b=map(int,input().split()) map(int,input().split()) h direction=[[1,0],[0,1],[-1,0],[0,-1]] [[1,0],[0,1],[-1,0],[0,-1]] direction lst=[[""]*w for i in range(h)] [[""]*w for i in range(h)] lst mod=pow(10,9)+7 pow(10,9)+7 mod l,r=0,a 0 l al=[chr(ord('a') + i) for i in range(26)] [chr(ord('a') + i) for i in range(26)] al w,a,b=map(int,input().split()) map(int,input().split()) w r=0,a a r
import bisect
import copy
import heapq
import math
import sys
from collections import *
from functools import lru_cache
from itertools import accumulate, combinations, permutations, product
def input():
    return sys.stdin.readline()[:-1]
def ruiseki(lst):
    return [0]+list(accumulate(lst))
sys.setrecursionlimit(500000)
mod=pow(10,9)+7
al=[chr(ord('a') + i) for i in range(26)]
direction=[[1,0],[0,1],[-1,0],[0,-1]]

h,w,a,b=map(int,input().split())

lst=[[""]*w for i in range(h)]
# print(lst)

l,r=0,a

for i in range(h):
    for j in range(w):
        if l<=j<r:
            if i<b:
                lst[i][j]="0"
            else:
                lst[i][j]="1"
        else:
            if i<b:
                lst[i][j]="1"
            else:
                lst[i][j]="0"

for i in range(h):
    print("".join(lst[i]))