# Правительство страны Ректилании решило построить новый город. По плану правительства, город должен быть построен
# на сетке M на N прямоугольных участков, размером 100 на 100 метров. Все улицы должны иметь ширину 100 метров
# и занимать соответственно одну горизонталь или вертикаль сетки. Вертикальные улицы должны пролегать по вертикалям
# с номерами X1...XV, горизонтальные – по горизонталям с номерами Y1...YH. При этом улицы не соприкасаются,
# то есть не бывает Xi = Xi-1 + 1 и соответственно Yj = Yj-1 + 1 .
# Все дома в новом городе должны занимать одну клетку сетки. Причем все дома должны находиться рядом с улицами,
# а в клетках, не имеющих общих сторон с улицами, будет разбит парк. Кроме того, дома не должны находиться
# на наружной стороне крайних улиц. Рисунок 1 изображает план города, рассмотренного в примере.
# Теперь правительство Ректилании хочет знать, сколько домов будет построено в новом городе и сколько в нем будет
# клеток парка. Ваша задача состоит в том, чтобы написать программу, которая рассчитает эти величины.
# На первой строке входного файла находятся числа M, N, V и H. (2 ≤ V < M ≤ 1000, 2 ≤ H < N ≤ 1000).
# На второй строке находятся координаты вертикальных улиц — V чисел: 1 = X1 < X2 < … < XV = M.
# На третьей строке находятся координаты горизонтальных улиц — H чисел 1 = Y1 < Y2 < … < YH = N.
# Все числа в строках разделены пробелами.
# Выведите в выходной файл три числа: A – количество домов в новом городе, B — количество клеток,
# в которых будет разбит парк и C — количество клеток, по которым будут пролегать улицы. Разделяйте числа пробелами.

print("Введите через пробел: ширину и длину города, количество вертикальных и горизонтальных улиц:")
M, N, V, H = (int(s) for s in input().split())

print("Введите через пробел координаты вертикальных улиц (не менее двух координат, крайние ряды - улицы):")
XV = [int(n) for n in input().split()]

print("Введите через пробел координаты горизонтальных улиц (не менее двух координат, крайние ряды - улицы):")
YH = [int(n) for n in input().split()]

A = [['vacant'] * M for i in range(N)]

# Заполняем план вертикальными улицами:
for i in range(V):
    for j in range(N):
        pos = XV[i] - 1
        A[j][pos] = 'street'

# Заполняем план горизонтальными улицами:
for i in range(H):
    for j in range(M):
        pos = YH[i] - 1
        A[pos][j] = 'street'

# Заполняем план домами кроме 1 крайнего ряда клеток внешнего периметра, которые по условию заняты улицами:
for i in range(1, N - 1):
    for j in range(1, M - 1):
        if A[i][j] == 'vacant':
            if A[i-1][j] == 'street' or A[i-2][j] == 'street' or A[i][j-1] == 'street' or A[i][j+1] == 'street':
                A[i][j] = 'house'
            else:
                A[i][j] = 'park'

# Распечатываем план города для проверки корректности обработки данных.
for r in A:
    for el in r:
        print(el.rjust(7), end=' ')
    print()

street_count = 0
house_count = 0
park_count = 0

# Подсчитываем количество клеток разного типа.
for i in range(N):
    for j in range(M):
        if A[i][j] == 'street':
            street_count +=1
        if A[i][j] == 'house':
            house_count +=1
        if A[i][j] == 'park':
            park_count +=1

print('Дома:', house_count, 'Парк:', park_count, 'Улицы:', street_count)
