using System;
using System.Text;
using System.Linq;
using System.Collections;
using System.Collections.Generic;


class Program {

	static long mod = 1000000007;
	//static long mod =998244353;
	static int[] ans;
	static void Main(string[] args) {

		char[] cs = new char[] { ' ' };
		//char[] cs = new char[] { ' ', ',' };

		//int n = int.Parse(Console.ReadLine());
		//int val = int.Parse(Console.ReadLine());
		//int[] vals = parseAry(Console.ReadLine().Split(cs));
		//string str = Console.ReadLine();
		//string[] strs = Console.ReadLine().Split(cs);

		//string res = "";
		int res = 0;
		int max = 2000;

		int[] vals = parseAry(Console.ReadLine().Split(cs));
		int height = vals[0];
		int width = vals[1];
		int a = vals[2];
		int b = vals[3];

		int flg = 0;
		int ta = 0;
		int tb = 0;

		StringBuilder sbzero = new StringBuilder();
		StringBuilder sbone = new StringBuilder();
		StringBuilder sbw = new StringBuilder();
		sbzero.Append('0', a);
		string szero = sbzero.ToString();
		sbone.Append('1', width - a);

		if ( a == 0 && b == 0 ) {
			StringBuilder ssss = new StringBuilder();
			for ( int i = 0; i < height; i++ ) {
				ssss = new StringBuilder();
				ssss.Append('0',width);
				Console.WriteLine(ssss.ToString());
			}
			return;
		}
		else if ( a != 0 && b == 0 ) {
			for ( int i = 0; i < height; i++ ) {
				sbw = new StringBuilder();
				sbw.Append(sbone);
				sbw.Append(sbzero);
				Console.WriteLine(sbw.ToString());
			}
			return;
		} else if ( a == 0 && b != 0 ) {

			StringBuilder z = new StringBuilder();
			StringBuilder o = new StringBuilder();
			z.Append('0', width);
			o.Append('1', width);
			for ( int i = 0; i < b; i++ ) {
				Console.WriteLine(z.ToString());
			}
			for ( int i = 0; i < height-b; i++ ) {
				Console.WriteLine(o.ToString());
			}
			return;
		}

			StringBuilder sss = new StringBuilder();
			sss.Append('0', a);
			sss.Append('1', width-a);
			for ( int i = 0; i < height - b; i++ ) {
				Console.WriteLine(sss.ToString());
			}
			sss = new StringBuilder();
			sss.Append('1', a);
			sss.Append('0', width - a);
			for ( int i = 0; i <  b; i++ ) {
				Console.WriteLine(sss.ToString());


		}

		/*

		if ( width % a == 0 ) {
			ta = width / a;
			if ( height % ta == 0 ) {
				tb = height / ta;
				if ( tb == b ) {
					flg = 1;
				}
			}
		}



		if ( flg == 0 ) {

			Console.WriteLine("No");
			return;
		}


		for ( int k = 0; k < height/ta; k++ ) {
			for ( int i = 0; i < ta; i++ ) {
				sbw = new StringBuilder();
				sbw.Append(sbone);
				sbw.Insert(szero.Length * i, szero);
				Console.WriteLine(sbw);
			}
		}
		*/

		return;

	}



	//	int配列をスペース区切りの文字列に変換
	static string stringBuilderArrayInt(int[] a) {
		StringBuilder sb = new StringBuilder();

		for ( int i = 0; i < a.Length; i++ ) {
			if ( a[i] == 1 ) { sb.Append(i + " "); }
		}
		if ( sb.Length > 1 ) {
			sb = sb.Remove(sb.Length - 1, 1);
		}
		return sb.ToString(); ;
	}


	//	文字列strをindex番目からdで上書き
	static string strOverWrite(string str, int i, string s) {
		return str.Remove(i, s.Length).Insert(i, s);
	}

	//　String[]  ----->  int[]
	static int[] parseAry(string[] str) {
		int[] nums = new int[str.Length];
		for ( int i = 0; i < str.Length; i++ ) { nums[i] = int.Parse(str[i]); }
		return nums;
	}
	//　String[]  ----->  long[]
	static long[] parseAryL(string[] str) {
		long[] nums = new long[str.Length];
		for ( int i = 0; i < str.Length; i++ ) { nums[i] = long.Parse(str[i]); }
		return nums;
	}

	//文字列を1文字ずつString[]に入れる
	static string[] strAry(String str) {
		string[] re = new string[str.Length];
		for ( int i = 0; i < str.Length; i++ ) { re[i] = str[i].ToString(); }
		return re;
	}



}

Measured memory_bytes: 16212