#include <bits/stdc++.h>
using namespace std;
struct st {
  int x, y;
};
bool comp(pair<int, int> a, pair<int, int> b) {
  if (a.first < b.first) return true;
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  st s;
  int n;
  cin >> n >> s.x >> s.y;
  vector<st> vec(n);
  for (int i = 0; i < n; i++) {
    cin >> vec[i].x >> vec[i].y;
  }
  long long pl;
  long long ans = 0;
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      if ((vec[i].x + vec[j].x <= s.x && max(vec[i].y, vec[j].y) <= s.y ||
           vec[i].x + vec[j].y <= s.x && max(vec[i].y, vec[j].x) <= s.y ||
           vec[i].y + vec[j].y <= s.x && max(vec[i].x, vec[j].x) <= s.y ||
           vec[i].y + vec[j].x <= s.x && max(vec[i].x, vec[j].y) <= s.y ||
           vec[i].y + vec[j].y <= s.y && max(vec[i].x, vec[j].x) <= s.x ||
           vec[i].x + vec[j].y <= s.y && max(vec[i].y, vec[j].x) <= s.x ||
           vec[i].x + vec[j].x <= s.y && max(vec[i].y, vec[j].y) <= s.x ||
           vec[i].y + vec[j].x <= s.y && max(vec[i].x, vec[j].y) <= s.x) &&
          vec[i].x * vec[i].y + vec[j].x * vec[j].y <= s.x * s.y &&
          vec[i].x * vec[i].y + vec[j].x * vec[j].y > ans)
        ans = vec[i].x * vec[i].y + vec[j].x * vec[j].y;
    }
  }
  cout << ans;
  return 0;
}
