#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const long double eps = 1e-13;
int n, m, tree[N];
long double w, x[N], v[N];
struct Vector {
  int x, y;
  long double xx, yy;
} vec[N];
bool cmp1(Vector a, Vector b) { return a.yy < b.yy; }
bool cmp2(Vector a, Vector b) { return a.xx < b.xx; }
bool cmp3(Vector a, Vector b) {
  if (a.x != b.x)
    return a.x > b.x;
  else
    return a.y < b.y;
}
inline void Updata(int x) {
  for (; x <= n; x += x & -x) tree[x]++;
}
inline int Query(int x) {
  int ans = 0;
  for (; x; x -= x & -x) ans += tree[x];
  return ans;
}
int main() {
  cin >> n >> w;
  for (int i = 1; i <= n; i++) scanf("%Lf%Lf", &x[i], &v[i]);
  for (int i = 1; i <= n; i++) {
    vec[i].xx = -1.0 * x[i] / (v[i] - w - eps);
    vec[i].yy = -1.0 * x[i] / (v[i] + w + eps);
  }
  sort(vec + 1, vec + n + 1, cmp1);
  for (int i = 1, now = 0, las = 0; i <= n; i++) {
    if ((abs(vec[i].yy - vec[las].yy) < eps))
      vec[i].y = now;
    else
      vec[i].y = ++now, las = i;
  }
  sort(vec + 1, vec + n + 1, cmp2);
  for (int i = 1, now = 0, las = 0; i <= n; i++) {
    if ((abs(vec[i].xx - vec[las].xx) < eps))
      vec[i].x = now;
    else
      vec[i].x = ++now, las = i;
  }
  sort(vec + 1, vec + n + 1, cmp3);
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    ans += Query(vec[i].y);
    Updata(vec[i].y);
  }
  printf("%lld", ans);
  return 0;
}
