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.
#include <bits/stdc++.h>
using namespace std;
class frac {
 public:
  long long int a, b;
  frac() {}
  frac(long long int aa, long long int bb) {
    a = aa;
    b = bb;
  }
  bool operator<(const frac q) const {
    long long int aa = a, bb = b, qa = q.a, qb = q.b;
    if (bb < 0) {
      aa = -aa;
      bb = -bb;
    }
    if (qb < 0) {
      qa = -qa;
      qb = -qb;
    }
    return (aa * qb < bb * qa);
  }
  void operator=(const frac q) {
    a = q.a;
    b = q.b;
    return;
  }
  bool operator==(const frac q) const {
    long long int aa = a, bb = b, qa = q.a, qb = q.b;
    if (bb < 0) {
      aa = -aa;
      bb = -bb;
    }
    if (qb < 0) {
      qa = -qa;
      qb = -qb;
    }
    return (aa * qb == bb * qa);
  }
  void print() { cout << a << "/" << b << endl; }
};
long long int ans;
class info {
 public:
  int id;
  frac ab;
  info() {}
  info(int ii, frac abab) { id = ii, ab = abab; }
  void operator=(const info q) {
    id = q.id;
    ab = q.ab;
    return;
  }
};
bool cmp(info pp, info qq) {
  if (pp.ab < qq.ab) return 1;
  if (qq.ab < pp.ab) return 0;
  if (pp.ab.a * qq.ab.a < 0) {
    return pp.ab.a < 0;
  } else
    return pp.ab.a > qq.ab.a;
}
void msort(info *arr, int r) {
  if (1 == r) return;
  int mid = (r) / 2, i, j, k;
  msort(arr, mid);
  msort(arr + mid, r - mid);
  info *temp = new info[r];
  j = 0;
  k = mid;
  for (i = 0; i < r; i++) {
    if (j == mid) {
      temp[i] = arr[k];
      k++;
    } else if (k == r) {
      temp[i] = arr[j];
      j++;
    } else if (arr[j].ab < arr[k].ab) {
      temp[i] = arr[j];
      j++;
    } else {
      ans += (mid - j);
      temp[i] = arr[k];
      k++;
    }
  }
  for (i = 0; i < r; i++) {
    arr[i] = temp[i];
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, w, i, idd;
  long long int first, vv;
  info *a = new info[100000];
  frac *plusw = new frac[100000];
  frac minw, nfrac;
  ans = 0;
  cin >> n >> w;
  for (i = 0; i < n; i++) {
    cin >> first >> vv;
    minw = frac(first, vv - w);
    a[i] = info(i, minw);
    plusw[i] = frac(first, vv + w);
  }
  if (w == 0) {
    sort(plusw, plusw + n);
    i = 0;
    while (i < n) {
      long long int tt = 0;
      frac cc;
      cc = plusw[i];
      i++;
      while (i < n && plusw[i] == cc) {
        tt++;
        i++;
      }
      ans += (tt * (tt + 1) / 2);
    }
    cout << ans << endl;
    return 0;
  }
  sort(a, a + n, cmp);
  for (i = 0; i < n; i++) {
    idd = a[i].id;
    a[i].ab = plusw[idd];
  }
  msort(a, n);
  cout << ans << endl;
  return 0;
}
