#from statistics import median
#import collections
#aa = collections.Counter(a) # list to list || .most_common(2)で最大の2個とりだせるお a[0][0]
from fractions import gcd
#from itertools import combinations # (string,3) 3回
#from collections import deque
#from collections import deque,defaultdict
#import bisect
#
#    d = m - k[i] - k[j]
#    if kk[bisect.bisect_right(kk,d) - 1] == d:
#
#
#
# pythonで無理なときは、pypyでやると正解するかも！！
#
#

import sys
sys.setrecursionlimit(10000000)
mod = 10**9 + 7
#mod = 9982443453
def readInts():
  return list(map(int,input().split()))
def I():
  return int(input())
h,w,a,b = readInts()
for _ in range(b):
    print('0' * a + '1' * (w-a))
for _ in range(h-b):
    print('1' * a + '0' * (w-a)) from fractions import gcd import sys sys sys.setrecursionlimit(10000000) sys.setrecursionlimit sys setrecursionlimit 10000000 mod = 10**9 + 7 mod 10**9 + 7 10**9 10 9 7 def readInts():
  return list(map(int,input().split())) readInts return list(map(int,input().split())) list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split def I():
  return int(input()) I return int(input()) int(input()) int input() input h,w,a,b = readInts() h readInts() readInts w a b for _ in range(b):
    print('0' * a + '1' * (w-a)) _ range(b) range b print('0' * a + '1' * (w-a)) print '0' * a + '1' * (w-a) '0' * a '0' a '1' * (w-a) '1' w-a w a for _ in range(h-b):
    print('1' * a + '0' * (w-a)) _ range(h-b) range h-b h b print('1' * a + '0' * (w-a)) print '1' * a + '0' * (w-a) '1' * a '1' a '0' * (w-a) '0' w-a w a def readInts():
  return list(map(int,input().split())) def readInts():
  return list(map(int,input().split())) readInts h,w,a,b = readInts() readInts() h a,b = readInts() readInts() a w,a,b = readInts() readInts() w b = readInts() readInts() b mod = 10**9 + 7 10**9 + 7 mod def I():
  return int(input()) def I():
  return int(input()) I
#from statistics import median
#import collections
#aa = collections.Counter(a) # list to list || .most_common(2)で最大の2個とりだせるお a[0][0]
from fractions import gcd
#from itertools import combinations # (string,3) 3回
#from collections import deque
#from collections import deque,defaultdict
#import bisect
#
#    d = m - k[i] - k[j]
#    if kk[bisect.bisect_right(kk,d) - 1] == d:
#
#
#
# pythonで無理なときは、pypyでやると正解するかも！！
#
#

import sys
sys.setrecursionlimit(10000000)
mod = 10**9 + 7
#mod = 9982443453
def readInts():
  return list(map(int,input().split()))
def I():
  return int(input())
h,w,a,b = readInts()
for _ in range(b):
    print('0' * a + '1' * (w-a))
for _ in range(h-b):
    print('1' * a + '0' * (w-a))
