#include <bits/stdc++.h>
using namespace std;
int gcd(int aa, int bb) {
  if (aa % bb == 0) return bb;
  return gcd(bb, aa % bb);
}
struct fraction {
  int a, b;
  fraction() {}
  fraction(int aa, int bb) {
    if (aa < 0) aa *= -1;
    if (bb < 0) bb *= -1;
    int nod = gcd(aa, bb);
    aa /= nod;
    bb /= nod;
    a = aa;
    b = bb;
  }
};
bool operator<(fraction f1, fraction f2) {
  long long x = f1.a, y = f2.a;
  int nod = gcd(f1.b, f2.b);
  x *= (long long)f2.b / nod;
  y *= (long long)f1.b / nod;
  return x < y;
}
bool operator==(fraction f1, fraction f2) {
  return f1.a == f2.a && f1.b == f2.b;
}
bool operator<=(fraction f1, fraction f2) { return f1 < f2 || f1 == f2; }
bool operator>(fraction f1, fraction f2) {
  long long x = f1.a, y = f2.a;
  int nod = gcd(f1.b, f2.b);
  x *= (long long)f2.b / nod;
  y *= (long long)f1.b / nod;
  return x > y;
}
bool operator>=(fraction f1, fraction f2) { return f1 > f2 || f1 == f2; }
bool operator!=(fraction f1, fraction f2) { return !(f1 == f2); }
int n, w;
struct plane {
  int x, v;
  fraction t1, t2;
  plane() {}
  plane(int xx, int vv) {
    x = xx;
    v = vv;
    t1 = fraction(xx, vv - w);
    t2 = fraction(xx, vv + w);
  }
};
vector<plane> info;
vector<int> v1, v2;
vector<int> arr, t;
bool cmp1(int ind1, int ind2) {
  plane p1 = info[ind1], p2 = info[ind2];
  if (p1.t1 != p2.t1) {
    return p1.t1 < p2.t1;
  }
  return p1.t2 > p2.t2;
}
bool cmp2(int ind1, int ind2) {
  plane p1 = info[ind1], p2 = info[ind2];
  if (p1.t2 != p2.t2) {
    return p1.t2 > p2.t2;
  }
  return p1.t1 < p2.t1;
}
int get_index(plane p) {
  int l = 0, r = n, m = (n + 1) / 2;
  while (m != l) {
    plane curr = info[v2[m]];
    if (p.t1 == curr.t1 && p.t2 == curr.t2) return m;
    if (p.t2 != curr.t2) {
      if (p.t2 < curr.t2)
        l = m;
      else
        r = m;
    } else {
      if (p.t1 < curr.t1)
        r = m;
      else
        l = m;
    }
    m = (l + r) / 2;
  }
  return m;
}
void add(int pos) {
  arr[pos]++;
  for (int i = pos; i < n; i = (i | (i + 1))) {
    t[i]++;
  }
}
int sum(int r) {
  int ret = 0;
  for (int i = r; i >= 0; i = (i & (i + 1)) - 1) {
    ret += t[i];
  }
  return ret;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> w;
  info.resize(n);
  v1.resize(n);
  v2.resize(n);
  arr.resize(n, 0);
  t.resize(n, 0);
  for (int i = 0; i < n; i++) {
    int xx, vv;
    cin >> xx >> vv;
    info[i] = plane(xx, vv);
    v1[i] = i;
    v2[i] = i;
  }
  sort(v1.begin(), v1.end(), cmp1);
  sort(v2.begin(), v2.end(), cmp2);
  if (w == 0) {
    long long ans = 0;
    for (int i = 0; i < n; i++) {
      long long curr_len = 1;
      while (i < n - 1 && info[v1[i]].t1 == info[v1[i + 1]].t1) {
        i++;
        curr_len++;
      }
      ans += curr_len * (curr_len - 1) / 2;
    }
    cout << ans << endl;
    return 0;
  }
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    int ind = get_index(info[v1[i]]);
    add(ind);
    ans += sum(ind - 1);
  }
  cout << ans << endl;
  return 0;
}
