#include <bits/stdc++.h>
using namespace std;
inline long long int f(long long int idx) { return 0; }
inline long long int g(long long int val, long long int key,
                       long long int ret) {
  return (val <= key) ? ret : ret - 1;
}
inline long long int lowbound(long long int l, long long int r,
                              long long int key) {
  long long int mid, val;
  while (l < r) {
    mid = (l + r) >> 1;
    val = f(mid);
    if (key > val) {
      l = mid + 1;
    } else {
      r = mid;
    }
  }
  return g(f(l), key, l);
}
bitset<1000001> ok;
inline void seive() {
  ok.set();
  for (int i = 2; i * i < 1000001; i++)
    if (ok[i])
      for (int j = i << 1; j < 1000001; j += i) ok.reset(j);
}
long long int phi[1000001];
inline void totient() {
  for (int i = int(1); i < int(1000001); i++) phi[i] = (i & 1) ? i : i / 2;
  for (long long int i = 3; i < 1000001; i += 2)
    if (phi[i] == i)
      for (long long int j = i; j < 1000001; j += i) phi[j] -= phi[j] / i;
}
inline long long int EXP(long long int a, long long int b, long long int mod) {
  long long int res = 1;
  while (b) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res;
}
inline long long int Poww(long long int a, long long int b) {
  long long int res = 1;
  while (b) {
    if (b & 1) res = res * a;
    a = a * a;
    b >>= 1;
  }
  return res;
}
inline long long int inv(long long int x, long long int mod) {
  return EXP(x, mod - 2, mod);
}
inline long long int anyinv(long long int a, long long int mod) {
  return (ok[mod]) ? EXP(a, mod - 2, mod) : EXP(a, phi[mod] - 1, mod);
}
long long int fact[1000001];
inline void Fact() {
  fact[0] = 1;
  for (int i = int(1); i < int(1000001); i++)
    fact[i] = (i * fact[i - 1]) % 1000000007;
}
inline long long int comb(long long int a, long long int b) {
  if (a < b) return 0;
  return (((fact[a] * inv(fact[b], 1000000007)) % 1000000007) *
          inv(fact[a - b], 1000000007)) %
         1000000007;
}
long long int C[1001][1001];
inline void COMB() {
  for (int i = int(0); i < int(1001); i++) {
    C[i][0] = C[i][i] = 1;
    for (int j = int(1); j <= int(i >> 1); j++)
      C[i][j] = C[i][i - j] = (C[i - 1][j] + C[i - 1][j - 1]) % 1000000007;
  }
}
bool cmp(pair<long long int, long long int> a,
         pair<long long int, long long int> b) {
  return ((a.first < b.first) ||
          ((a.first == b.first) && (a.second < b.second)));
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, x1, x2, k, b;
  cin >> n >> x1 >> x2;
  vector<pair<long long int, long long int> > inp;
  for (int i = int(0); i < int(n); i++) {
    cin >> k >> b;
    inp.push_back(make_pair(k * x1 + b, k * x2 + b));
  }
  sort(inp.begin(), inp.end(), cmp);
  for (int i = int(1); i < int(n); i++)
    if ((inp[i].first != inp[i - 1].first) &&
        (inp[i].second < inp[i - 1].second)) {
      cout << "YES\n";
      return 0;
    }
  cout << "NO\n";
  return 0;
}

### Prompt

Your task is to create a Cpp solution to the following problem:

The teacher gave Anton a large geometry homework, but he didn't do it (as usual) as he participated in a regular round on Codeforces. In the task he was given a set of n lines defined by the equations y = ki·x + bi. It was necessary to determine whether there is at least one point of intersection of two of these lines, that lays strictly inside the strip between x1 < x2. In other words, is it true that there are 1 ≤ i < j ≤ n and x', y', such that: 

  * y' = ki * x' + bi, that is, point (x', y') belongs to the line number i; 
  * y' = kj * x' + bj, that is, point (x', y') belongs to the line number j; 
  * x1 < x' < x2, that is, point (x', y') lies inside the strip bounded by x1 < x2. 



You can't leave Anton in trouble, can you? Write a program that solves the given task.

Input

The first line of the input contains an integer n (2 ≤ n ≤ 100 000) — the number of lines in the task given to Anton. The second line contains integers x1 and x2 ( - 1 000 000 ≤ x1 < x2 ≤ 1 000 000) defining the strip inside which you need to find a point of intersection of at least two lines.

The following n lines contain integers ki, bi ( - 1 000 000 ≤ ki, bi ≤ 1 000 000) — the descriptions of the lines. It is guaranteed that all lines are pairwise distinct, that is, for any two i ≠ j it is true that either ki ≠ kj, or bi ≠ bj.

Output

Print "Yes" (without quotes), if there is at least one intersection of two distinct lines, located strictly inside the strip. Otherwise print "No" (without quotes).

Examples

Input

4
1 2
1 2
1 0
0 1
0 2


Output

NO

Input

2
1 3
1 0
-1 3


Output

YES

Input

2
1 3
1 0
0 2


Output

YES

Input

2
1 3
1 0
0 3


Output

NO

Note

In the first sample there are intersections located on the border of the strip, but there are no intersections located strictly inside it.

<image>

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
inline long long int f(long long int idx) { return 0; }
inline long long int g(long long int val, long long int key,
                       long long int ret) {
  return (val <= key) ? ret : ret - 1;
}
inline long long int lowbound(long long int l, long long int r,
                              long long int key) {
  long long int mid, val;
  while (l < r) {
    mid = (l + r) >> 1;
    val = f(mid);
    if (key > val) {
      l = mid + 1;
    } else {
      r = mid;
    }
  }
  return g(f(l), key, l);
}
bitset<1000001> ok;
inline void seive() {
  ok.set();
  for (int i = 2; i * i < 1000001; i++)
    if (ok[i])
      for (int j = i << 1; j < 1000001; j += i) ok.reset(j);
}
long long int phi[1000001];
inline void totient() {
  for (int i = int(1); i < int(1000001); i++) phi[i] = (i & 1) ? i : i / 2;
  for (long long int i = 3; i < 1000001; i += 2)
    if (phi[i] == i)
      for (long long int j = i; j < 1000001; j += i) phi[j] -= phi[j] / i;
}
inline long long int EXP(long long int a, long long int b, long long int mod) {
  long long int res = 1;
  while (b) {
    if (b & 1) res = (res * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return res;
}
inline long long int Poww(long long int a, long long int b) {
  long long int res = 1;
  while (b) {
    if (b & 1) res = res * a;
    a = a * a;
    b >>= 1;
  }
  return res;
}
inline long long int inv(long long int x, long long int mod) {
  return EXP(x, mod - 2, mod);
}
inline long long int anyinv(long long int a, long long int mod) {
  return (ok[mod]) ? EXP(a, mod - 2, mod) : EXP(a, phi[mod] - 1, mod);
}
long long int fact[1000001];
inline void Fact() {
  fact[0] = 1;
  for (int i = int(1); i < int(1000001); i++)
    fact[i] = (i * fact[i - 1]) % 1000000007;
}
inline long long int comb(long long int a, long long int b) {
  if (a < b) return 0;
  return (((fact[a] * inv(fact[b], 1000000007)) % 1000000007) *
          inv(fact[a - b], 1000000007)) %
         1000000007;
}
long long int C[1001][1001];
inline void COMB() {
  for (int i = int(0); i < int(1001); i++) {
    C[i][0] = C[i][i] = 1;
    for (int j = int(1); j <= int(i >> 1); j++)
      C[i][j] = C[i][i - j] = (C[i - 1][j] + C[i - 1][j - 1]) % 1000000007;
  }
}
bool cmp(pair<long long int, long long int> a,
         pair<long long int, long long int> b) {
  return ((a.first < b.first) ||
          ((a.first == b.first) && (a.second < b.second)));
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, x1, x2, k, b;
  cin >> n >> x1 >> x2;
  vector<pair<long long int, long long int> > inp;
  for (int i = int(0); i < int(n); i++) {
    cin >> k >> b;
    inp.push_back(make_pair(k * x1 + b, k * x2 + b));
  }
  sort(inp.begin(), inp.end(), cmp);
  for (int i = int(1); i < int(n); i++)
    if ((inp[i].first != inp[i - 1].first) &&
        (inp[i].second < inp[i - 1].second)) {
      cout << "YES\n";
      return 0;
    }
  cout << "NO\n";
  return 0;
}

```