def максимальная_площадь_ковров(ковры, витрина):
    ковры.sort(reverse=True)  # Сортируем ковры в порядке убывания площади.
    площадь_витрины = витрина[0] * витрина[1]
    максимальная_площадь = 0

    def поместить_ковер(ковер, ширина_витрины, высота_витрины):
        nonlocal максимальная_площадь
        if not ковер:
            # Если больше нет ковров, вернуть площадь текущей расстановки.
            максимальная_площадь = max(максимальная_площадь, ширина_витрины * высота_витрины)
            return
        if ковер[0][0] <= ширина_витрины and ковер[0][1] <= высота_витрины:
            # Размещаем ковер влево и вверх.
            поместить_ковер(ковер[1:], ширина_витрины, высота_витрины - ковер[0][1])
            # Размещаем ковер вправо и вниз.
            поместить_ковер(ковер[1:], ковер[0][0], высота_витрины)
            поместить_ковер(ковер[1:], ширина_витрины - ковер[0][0], ковер[0][1])

    поместить_ковер(ковры, витрина[0], витрина[1])
    return максимальная_площадь

# Пример использования:
ковры = [(4, 3), (2, 2), (3, 2), (1, 1)]
витрина = (5, 5)

результат = максимальная_площадь_ковров(ковры, витрина)
print("Максимальная суммарная площадь ковров на витрине:", результат)
