```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)
}
```