#float型を許すな
#numpyはpythonで
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**7)
from collections import Counter, deque
from collections import defaultdict
from itertools import combinations, permutations, accumulate, groupby, product
from bisect import bisect_left,bisect_right
from heapq import heapify, heappop, heappush
from math import floor, ceil,pi,factorial,sin
from operator import itemgetter
def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))
def LI2(): return [int(input()) for i in range(n)]
def MXI(): return [[LI()]for i in range(n)]
def SI(): return input().rstrip()
def printns(x): print('\n'.join(x))
def printni(x): print('\n'.join(list(map(str,x))))
inf = 10**17
mod = 10**9 + 7

h,w,a,b=MI()
lis=[[0]*w for i in range(h)]
for i in range(b):
    for j in range(w):
        if j<a:
            lis[i][j]=1
        else:
            lis[i][j]=0
#print(lis)
for i in range(h-b):
    for j in range(w):
        if j<a:
            lis[i+b][j]=0
        else:
            lis[i+b][j]=1
#print(lis)
for i in range(h):
    for j in range(w):
        print(lis[i][j],end="")
    print()
            
        



        
    
    


    


     import sys sys input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline sys.setrecursionlimit(10**7) sys.setrecursionlimit sys setrecursionlimit 10**7 10 7 from collections import Counter, deque from collections import defaultdict from itertools import combinations, permutations, accumulate, groupby, product from bisect import bisect_left,bisect_right from heapq import heapify, heappop, heappush from math import floor, ceil,pi,factorial,sin from operator import itemgetter def I(): return int(input()) I def MI(): return map(int, input().split()) MI def LI(): return list(map(int, input().split())) LI int(input()) for i in range(n) for i in range(n) i range(n) range n for i in range(n) int(input()) int input() input def LI2(): return [int(input()) for i in range(n)] LI2 [LI()]for i in range(n) for i in range(n) i range(n) range n for i in range(n) [LI()] LI() LI def MXI(): return [[LI()]for i in range(n)] MXI def SI(): return input().rstrip() SI def printns(x): print('\n'.join(x)) printns x x def printni(x): print('\n'.join(list(map(str,x)))) printni x x inf = 10**17 inf 10**17 10 17 mod = 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 h,w,a,b=MI() h MI() MI w a b [0]*w for i in range(h) for i in range(h) i range(h) range h for i in range(h) [0]*w [0] 0 w lis=[[0]*w for i in range(h)] lis [[0]*w for i in range(h)] for i in range(b):
    for j in range(w):
        if j<a:
            lis[i][j]=1
        else:
            lis[i][j]=0
#print(lis) i range(b) range b for j in range(w):
        if j<a:
            lis[i][j]=1
        else:
            lis[i][j]=0
#print(lis) j range(w) range w if j<a:
            lis[i][j]=1
        else:
            lis[i][j]=0
#print(lis) j<a j a lis[i][j]=1 lis[i][j] [i] lis i j 1 lis[i][j]=0 lis[i][j] [i] lis i j 0 for i in range(h-b):
    for j in range(w):
        if j<a:
            lis[i+b][j]=0
        else:
            lis[i+b][j]=1
#print(lis) i range(h-b) range h-b h b for j in range(w):
        if j<a:
            lis[i+b][j]=0
        else:
            lis[i+b][j]=1
#print(lis) j range(w) range w if j<a:
            lis[i+b][j]=0
        else:
            lis[i+b][j]=1
#print(lis) j<a j a lis[i+b][j]=0 lis[i+b][j] [i+b] lis i+b i b j 0 lis[i+b][j]=1 lis[i+b][j] [i+b] lis i+b i b j 1 for i in range(h):
    for j in range(w):
        print(lis[i][j],end="")
    print()
            
        



        
    
    


    


     i range(h) range h for j in range(w):
        print(lis[i][j],end="")
     j range(w) range w print(lis[i][j],end="") print lis[i][j] [i] lis i j end="" end "" print() print def LI2(): return [int(input()) for i in range(n)] def LI2(): return [int(input()) for i in range(n)] LI2 def SI(): return input().rstrip() def SI(): return input().rstrip() SI def LI(): return list(map(int, input().split())) def LI(): return list(map(int, input().split())) LI def MXI(): return [[LI()]for i in range(n)] def MXI(): return [[LI()]for i in range(n)] MXI inf = 10**17 10**17 inf b=MI() MI() b a,b=MI() MI() a lis=[[0]*w for i in range(h)] [[0]*w for i in range(h)] lis def I(): return int(input()) def I(): return int(input()) I h,w,a,b=MI() MI() h w,a,b=MI() MI() w def printns(x): print('\n'.join(x)) def printns(x): print('\n'.join(x)) printns def printni(x): print('\n'.join(list(map(str,x)))) def printni(x): print('\n'.join(list(map(str,x)))) printni mod = 10**9 + 7 10**9 + 7 mod input = sys.stdin.readline sys.stdin.readline input def MI(): return map(int, input().split()) def MI(): return map(int, input().split()) MI
#float型を許すな
#numpyはpythonで
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**7)
from collections import Counter, deque
from collections import defaultdict
from itertools import combinations, permutations, accumulate, groupby, product
from bisect import bisect_left,bisect_right
from heapq import heapify, heappop, heappush
from math import floor, ceil,pi,factorial,sin
from operator import itemgetter
def I(): return int(input())
def MI(): return map(int, input().split())
def LI(): return list(map(int, input().split()))
def LI2(): return [int(input()) for i in range(n)]
def MXI(): return [[LI()]for i in range(n)]
def SI(): return input().rstrip()
def printns(x): print('\n'.join(x))
def printni(x): print('\n'.join(list(map(str,x))))
inf = 10**17
mod = 10**9 + 7

h,w,a,b=MI()
lis=[[0]*w for i in range(h)]
for i in range(b):
    for j in range(w):
        if j<a:
            lis[i][j]=1
        else:
            lis[i][j]=0
#print(lis)
for i in range(h-b):
    for j in range(w):
        if j<a:
            lis[i+b][j]=0
        else:
            lis[i+b][j]=1
#print(lis)
for i in range(h):
    for j in range(w):
        print(lis[i][j],end="")
    print()
            
        



        
    
    


    


    
