← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func max(x, y int) int {
	if x > y {
		return x
	}
	return y
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Scan()
	line := scanner.Text()
	parts := strings.Fields(line)
	n, _ := strconv.Atoi(parts[0])
	A, _ := strconv.Atoi(parts[1])
	B, _ := strconv.Atoi(parts[2])
	seals := make([][2]int, n)
	for i := 0; i < n; i++ {
		scanner.Scan()
		line = scanner.Text()
		parts = strings.Fields(line)
		x, _ := strconv.Atoi(parts[0])
		y, _ := strconv.Atoi(parts[1])
		seals[i] = [2]int{x, y}
	}
	maxArea := 0
	for i := 0; i < n; i++ {
		for j := i + 1; j < n; j++ {
			area1 := seals[i][0] * seals[i][1]
			area2 := seals[j][0] * seals[j][1]
			can := false
		outer:
			for r1 := 0; r1 < 2; r1++ {
				w1 := seals[i][r1]
				h1 := seals[i][1-r1]
				for r2 := 0; r2 < 2; r2++ {
					w2 := seals[j][r2]
					h2 := seals[j][1-r2]
					if (w1+w2 <= A && max(h1, h2) <= B) ||
						(h1+h2 <= B && max(w1, w2) <= A) {
						can = true
						break outer
					}
				}
			}
			if can {
				sum := area1 + area2
				if sum > maxArea {
					maxArea = sum
				}
			}
		}
	}
	fmt.Println(maxArea)
}
```