Buggy python submission (verdict: Runtime Error):
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    flg1 = h * a == w * b
    flg2 = w % a == 0 and h % b == 0
    flg3 = a == 0 or b == 0
    if not(flg1 and flg2) and not flg3:
        print("No")
        exit(0)

    if b == 0:
        ans = "0" * a + "1" * (w - a)
        print(ans)
    elif a == 0:
        for _ in range(h):
            print("1" * w)
    else:
        for i in range(int(h // b)):
            for j in range(b):
                ans = "1" * a*i + "0" * a + "1" * (w - a - a * i)
                print(ans)


if __name__ == '__main__':
    main()


Fixed submission:
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    for i in range(h):
        if i < b:
            print("0" * a + "1" * (w - a))
        else:
            print("1" * a + "0" * (w - a))


if __name__ == '__main__':
    main()

Buggy python submission (verdict: Runtime Error):
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    flg1 = h * a == w * b
    flg2 = w % a == 0 and h % b == 0
    flg3 = a == 0 or b == 0
    if not(flg1 and flg2) and not flg3:
        print("No")
        exit(0)

    if b == 0:
        ans = "0" * a + "1" * (w - a)
        print(ans)
    elif a == 0:
        for _ in range(h):
            print("1" * w)
    else:
        for i in range(int(h // b)):
            for j in range(b):
                ans = "1" * i + "0" * a + "1" * (w - a - a * i)
                print(ans)


if __name__ == '__main__':
    main()


Fixed submission:
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    for i in range(h):
        if i < b:
            print("0" * a + "1" * (w - a))
        else:
            print("1" * a + "0" * (w - a))


if __name__ == '__main__':
    main()

Buggy python submission (verdict: Runtime Error):
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    flg1 = h * a == w * b
    flg2 = w % a == 0 and h % b == 0
    flg3 = a == 0 or b == 0
    if not(flg1 and flg2) and not flg3:
        print("No")
        exit(0)

    if b == 0:
        ans = "0" * a + "1" * (w - a)
        print(ans)
    elif a == 0:
        for _ in range(h):
            print("1" * w)
    else:
        for i in range(h // b):
            for j in range(b):
                ans = "1" * i + "0" * a + "1" * (w - a - a * i)
                print(ans)


if __name__ == '__main__':
    main()


Fixed submission:
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    for i in range(h):
        if i < b:
            print("0" * a + "1" * (w - a))
        else:
            print("1" * a + "0" * (w - a))


if __name__ == '__main__':
    main()

Buggy python submission (verdict: Runtime Error):
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    flg1 = h * a == w * b
    flg2 = w % a == 0 and h % b == 0
    flg3 = a == 0 or b == 0
    if not((flg1 and flg2) or flg3):
        print("No")
        exit(0)

    if b == 0:
        ans = "0" * a + "1" * (w - a)
        print(ans)
    elif a == 0:
        for _ in range(h):
            print("1" * w)
    else:
        for i in range(h // b):
            for j in range(b):
                ans = "1" * i + "0" * a + "1" * (w - a - a * i)
                print(ans)


if __name__ == '__main__':
    main()


Fixed submission:
import sys

# import re
import math
import collections
# import decimal
# import bisect
# import itertools
import fractions
# import functools
import copy
# import heapq
import decimal
# import statistics
import queue

sys.setrecursionlimit(10000001)
INF = 10 ** 16
MOD = 10 ** 9 + 7

ni = lambda: int(sys.stdin.readline())
ns = lambda: map(int, sys.stdin.readline().split())
na = lambda: list(map(int, sys.stdin.readline().split()))


# ===CODE===


def main():
    h, w, a, b = ns()

    for i in range(h):
        if i < b:
            print("0" * a + "1" * (w - a))
        else:
            print("1" * a + "0" * (w - a))


if __name__ == '__main__':
    main()