#include <bits/stdc++.h>
using namespace std;
template <typename T>
void printvec(vector<T> &vec) {
  for (int i = 0; i < vec.size(); i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
}
struct fraction {
  template <typename T>
  static inline T gcd(const T a, const T b) {
    return (b == 0) ? a : gcd(b, a % b);
  }
  long long num, deno;
  inline void simplify() {
    if (deno < 0) {
      num *= -1;
      deno *= -1;
    }
    long long g = gcd(num < 0 ? -num : num, deno);
    num /= g;
    deno /= g;
  }
  fraction() {}
  fraction(long long num, long long deno) : num(num), deno(deno) { simplify(); }
  inline bool operator<(const fraction &rhs) const {
    return num * rhs.deno < deno * rhs.num;
  }
  inline bool operator!=(const fraction &rhs) const {
    return num * rhs.deno != deno * rhs.num;
  }
};
vector<int> bit;
void update(int idx, int add) {
  int i;
  for (i = idx + 1; i < bit.size(); i = (i + (i & (-1 * i)))) {
    bit[i] += add;
  }
}
int getsum(int idx) {
  int sum = 0, i;
  for (i = idx + 1; i > 0; i = (i - (i & (-1 * i)))) {
    sum += bit[i];
  }
  return sum;
}
int main() {
  std::ios::sync_with_stdio(false);
  int ttt = 1;
  while (ttt--) {
    int n, wind, i;
    cin >> n >> wind;
    vector<int> x(n), v(n);
    for (i = 0; i < n; i++) {
      cin >> x[i] >> v[i];
    }
    vector<pair<fraction, fraction> > vec(n);
    for (i = 0; i < n; i++) {
      fraction a{x[i], v[i] - wind};
      fraction b{-1 * x[i], v[i] + wind};
      vec[i] = make_pair(a, b);
    }
    long long ans = 0;
    sort(vec.begin(), vec.end());
    map<fraction, int> mapp;
    vector<fraction> arr(n);
    for (i = 0; i < n; i++) {
      fraction temp = vec[i].second;
      temp.num *= -1;
      arr[i] = temp;
      mapp[temp] = 0;
    }
    map<fraction, int>::iterator it;
    int ctr = 1;
    for (it = mapp.begin(); it != mapp.end(); it++) {
      it->second = ctr++;
    }
    bit.resize(ctr);
    for (i = 0; i < bit.size(); i++) {
      bit[i] = 0;
    }
    for (i = 0; i < n; i++) {
      int x = mapp[arr[i]];
      long long add = i - getsum(x - 1);
      ans += add;
      update(x, 1);
    }
    cout << ans;
  }
  return 0;
}

### Prompt

Please formulate a cpp solution to the following problem:

Arkady the air traffic controller is now working with n planes in the air. All planes move along a straight coordinate axis with Arkady's station being at point 0 on it. The i-th plane, small enough to be represented by a point, currently has a coordinate of xi and is moving with speed vi. It's guaranteed that xi·vi < 0, i.e., all planes are moving towards the station.

Occasionally, the planes are affected by winds. With a wind of speed vwind (not necessarily positive or integral), the speed of the i-th plane becomes vi + vwind.

According to weather report, the current wind has a steady speed falling inside the range [ - w, w] (inclusive), but the exact value cannot be measured accurately since this value is rather small — smaller than the absolute value of speed of any plane.

Each plane should contact Arkady at the exact moment it passes above his station. And you are to help Arkady count the number of pairs of planes (i, j) (i < j) there are such that there is a possible value of wind speed, under which planes i and j contact Arkady at the same moment. This value needn't be the same across different pairs.

The wind speed is the same for all planes. You may assume that the wind has a steady speed and lasts arbitrarily long.

Input

The first line contains two integers n and w (1 ≤ n ≤ 100 000, 0 ≤ w < 105) — the number of planes and the maximum wind speed.

The i-th of the next n lines contains two integers xi and vi (1 ≤ |xi| ≤ 105, w + 1 ≤ |vi| ≤ 105, xi·vi < 0) — the initial position and speed of the i-th plane.

Planes are pairwise distinct, that is, no pair of (i, j) (i < j) exists such that both xi = xj and vi = vj.

Output

Output a single integer — the number of unordered pairs of planes that can contact Arkady at the same moment.

Examples

Input

5 1
-3 2
-3 3
-1 2
1 -3
3 -5


Output

3


Input

6 1
-3 2
-2 2
-1 2
1 -2
2 -2
3 -2


Output

9

Note

In the first example, the following 3 pairs of planes satisfy the requirements: 

  * (2, 5) passes the station at time 3 / 4 with vwind = 1; 
  * (3, 4) passes the station at time 2 / 5 with vwind = 1 / 2; 
  * (3, 5) passes the station at time 4 / 7 with vwind = - 1 / 4. 



In the second example, each of the 3 planes with negative coordinates can form a valid pair with each of the other 3, totaling 9 pairs.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
template <typename T>
void printvec(vector<T> &vec) {
  for (int i = 0; i < vec.size(); i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
}
struct fraction {
  template <typename T>
  static inline T gcd(const T a, const T b) {
    return (b == 0) ? a : gcd(b, a % b);
  }
  long long num, deno;
  inline void simplify() {
    if (deno < 0) {
      num *= -1;
      deno *= -1;
    }
    long long g = gcd(num < 0 ? -num : num, deno);
    num /= g;
    deno /= g;
  }
  fraction() {}
  fraction(long long num, long long deno) : num(num), deno(deno) { simplify(); }
  inline bool operator<(const fraction &rhs) const {
    return num * rhs.deno < deno * rhs.num;
  }
  inline bool operator!=(const fraction &rhs) const {
    return num * rhs.deno != deno * rhs.num;
  }
};
vector<int> bit;
void update(int idx, int add) {
  int i;
  for (i = idx + 1; i < bit.size(); i = (i + (i & (-1 * i)))) {
    bit[i] += add;
  }
}
int getsum(int idx) {
  int sum = 0, i;
  for (i = idx + 1; i > 0; i = (i - (i & (-1 * i)))) {
    sum += bit[i];
  }
  return sum;
}
int main() {
  std::ios::sync_with_stdio(false);
  int ttt = 1;
  while (ttt--) {
    int n, wind, i;
    cin >> n >> wind;
    vector<int> x(n), v(n);
    for (i = 0; i < n; i++) {
      cin >> x[i] >> v[i];
    }
    vector<pair<fraction, fraction> > vec(n);
    for (i = 0; i < n; i++) {
      fraction a{x[i], v[i] - wind};
      fraction b{-1 * x[i], v[i] + wind};
      vec[i] = make_pair(a, b);
    }
    long long ans = 0;
    sort(vec.begin(), vec.end());
    map<fraction, int> mapp;
    vector<fraction> arr(n);
    for (i = 0; i < n; i++) {
      fraction temp = vec[i].second;
      temp.num *= -1;
      arr[i] = temp;
      mapp[temp] = 0;
    }
    map<fraction, int>::iterator it;
    int ctr = 1;
    for (it = mapp.begin(); it != mapp.end(); it++) {
      it->second = ctr++;
    }
    bit.resize(ctr);
    for (i = 0; i < bit.size(); i++) {
      bit[i] = 0;
    }
    for (i = 0; i < n; i++) {
      int x = mapp[arr[i]];
      long long add = i - getsum(x - 1);
      ans += add;
      update(x, 1);
    }
    cout << ans;
  }
  return 0;
}

```