from math import ceil,floor,factorial,gcd,sqrt,log2,cos,sin,tan,acos,asin,atan,degrees,radians,pi,inf,comb
from itertools import accumulate,groupby,permutations,combinations,product,combinations_with_replacement
from collections import deque,defaultdict,Counter
from bisect import bisect_left,bisect_right
from operator import itemgetter
from heapq import heapify,heappop,heappush
from queue import Queue,LifoQueue,PriorityQueue
from copy import deepcopy
from time import time
import string
import sys
sys.setrecursionlimit(10 ** 7)
def input() : return sys.stdin.readline().strip()
def INT()   : return int(input())
def MAP()   : return map(int,input().split())
def LIST()  : return list(MAP())

h, w, a, b = MAP()

s = [[0]*w for i in range(h)]

for i in range(h):
    for j in range(w):
        if ( i < b and j >= a ) or ( i >= b and j < a ):
            s[i][j] = 1

for i in range(h):
    print(*s[i][:], sep="") from math import ceil,floor,factorial,gcd,sqrt,log2,cos,sin,tan,acos,asin,atan,degrees,radians,pi,inf,comb from itertools import accumulate,groupby,permutations,combinations,product,combinations_with_replacement from collections import deque,defaultdict,Counter from bisect import bisect_left,bisect_right from operator import itemgetter from heapq import heapify,heappop,heappush from queue import Queue,LifoQueue,PriorityQueue from copy import deepcopy from time import time import string string import sys sys sys.setrecursionlimit(10 ** 7) sys.setrecursionlimit sys setrecursionlimit 10 ** 7 10 7 def input() : return sys.stdin.readline().strip() input def INT()   : return int(input()) INT def MAP()   : return map(int,input().split()) MAP def LIST()  : return list(MAP()) LIST h, w, a, b = MAP() h MAP() MAP 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 s = [[0]*w for i in range(h)] s [[0]*w for i in range(h)] for i in range(h):
    for j in range(w):
        if ( i < b and j >= a ) or ( i >= b and j < a ):
            s[i][j] = 1 i range(h) range h for j in range(w):
        if ( i < b and j >= a ) or ( i >= b and j < a ):
            s[i][j] = 1 j range(w) range w if ( i < b and j >= a ) or ( i >= b and j < a ):
            s[i][j] = 1 ( i < b and j >= a ) or ( i >= b and j < a ) i < b and j >= a i < b i b j >= a j a i >= b and j < a i >= b i b j < a j a s[i][j] = 1 s[i][j] [i] s i j 1 for i in range(h):
    print(*s[i][:], sep="") i range(h) range h print(*s[i][:], sep="") print *s[i][:] s[i][:] [i] s i : sep="" sep "" def input() : return sys.stdin.readline().strip() def input() : return sys.stdin.readline().strip() input def MAP()   : return map(int,input().split()) def MAP()   : return map(int,input().split()) MAP b = MAP() MAP() b def INT()   : return int(input()) def INT()   : return int(input()) INT s = [[0]*w for i in range(h)] [[0]*w for i in range(h)] s a, b = MAP() MAP() a def LIST()  : return list(MAP()) def LIST()  : return list(MAP()) LIST w, a, b = MAP() MAP() w h, w, a, b = MAP() MAP() h
from math import ceil,floor,factorial,gcd,sqrt,log2,cos,sin,tan,acos,asin,atan,degrees,radians,pi,inf,comb
from itertools import accumulate,groupby,permutations,combinations,product,combinations_with_replacement
from collections import deque,defaultdict,Counter
from bisect import bisect_left,bisect_right
from operator import itemgetter
from heapq import heapify,heappop,heappush
from queue import Queue,LifoQueue,PriorityQueue
from copy import deepcopy
from time import time
import string
import sys
sys.setrecursionlimit(10 ** 7)
def input() : return sys.stdin.readline().strip()
def INT()   : return int(input())
def MAP()   : return map(int,input().split())
def LIST()  : return list(MAP())

h, w, a, b = MAP()

s = [[0]*w for i in range(h)]

for i in range(h):
    for j in range(w):
        if ( i < b and j >= a ) or ( i >= b and j < a ):
            s[i][j] = 1

for i in range(h):
    print(*s[i][:], sep="")