#include <bits/stdc++.h>
using namespace std;
vector<string> vec_splitter(string s) {
  s += ',';
  vector<string> res;
  while (!s.empty()) {
    res.push_back(s.substr(0, s.find(',')));
    s = s.substr(s.find(',') + 1);
  }
  return res;
}
void debug_out(vector<string> __attribute__((unused)) args,
               __attribute__((unused)) int idx,
               __attribute__((unused)) int LINE_NUM) {
  cerr << endl;
}
template <typename Head, typename... Tail>
void debug_out(vector<string> args, int idx, int LINE_NUM, Head H, Tail... T) {
  if (idx > 0)
    cerr << ", ";
  else
    cerr << "Line(" << LINE_NUM << ") ";
  stringstream ss;
  ss << H;
  cerr << args[idx] << " = " << ss.str();
  debug_out(args, idx + 1, LINE_NUM, T...);
}
const double PI = 3.14159265358979323846;
const double eps = (1e-7);
enum { LESS, EQUAL, GREATER };
int dcmp(long double x, long double y) {
  if (fabs(x - y) <= eps) return EQUAL;
  return x > y ? GREATER : LESS;
}
const int MAX_N = 2e5 + 5;
long long t[4 * MAX_N];
void update(int i, long long v, int p = 1, int l = 0, int r = MAX_N - 1) {
  if (l == r)
    t[p] = max(t[p], v);
  else {
    int mid = (l + r) / 2;
    if (i <= mid)
      update(i, v, 2 * p, l, mid);
    else
      update(i, v, 2 * p + 1, mid + 1, r);
    t[p] = max(t[2 * p], t[2 * p + 1]);
  }
}
long long get(int stq, int enq, int p = 1, int l = 0, int r = MAX_N - 1) {
  if (l >= stq && r <= enq) return t[p];
  if (l > enq || r < stq) return LLONG_MIN;
  int mid = (l + r) / 2;
  return max(get(stq, enq, 2 * p, l, mid),
             get(stq, enq, 2 * p + 1, mid + 1, r));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, x1, x2;
  cin >> n >> x1 >> x2;
  vector<pair<int, int> > line(n);
  for (int i = 0; i < n; ++i) cin >> line[i].first >> line[i].second;
  sort(line.begin(), line.end());
  reverse(line.begin(), line.end());
  vector<pair<long long, long long> > v(n);
  map<long long, int> cpr;
  for (int i = 0; i < n; ++i) {
    v[i].first = line[i].second + 1LL * line[i].first * x1;
    v[i].second = line[i].second + 1LL * line[i].first * x2;
    cpr[v[i].first];
    cpr[v[i].second];
  }
  int id = 1;
  for (auto &item : cpr) item.second = id++;
  for (int i = 0; i < n; ++i) {
    v[i].first = cpr[v[i].first];
    v[i].second = cpr[v[i].second];
  }
  fill(t, t + 4 * MAX_N, -1e18);
  for (int i = 0; i < n;) {
    int m = line[i].first, st = i;
    while (i < n && m == line[i].first) {
      long long mx = get(0, v[i].first - 1);
      if (v[i].second < mx) {
        cout << "YES\n";
        return 0;
      }
      ++i;
    }
    while (st < i) {
      update(v[st].first, v[st].second);
      ++st;
    }
  }
  cout << "NO\n";
}
