#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
long long n, w;
struct Ap {
  long long x, v;
  const bool operator<(const Ap b) const {
    return x == b.x ? v < b.v : x < b.x;
  }
  const bool operator==(const Ap b) const {
    return x * (b.v + w) == b.x * (v + w);
  }
  const bool operator!=(const Ap b) const { return !(*this == b); }
} ap[N];
long long v[N], tmp[N];
long long cnt_rep() {
  long long cnt = 0;
  for (long long i = 0; i < n;) {
    long long j;
    for (j = i + 1; j < n; j++)
      if (ap[i] != ap[j]) break;
    cnt += (j - i) * (j - i - 1) / 2;
    i = j;
  }
  return cnt;
}
long long ms(long long l, long long r) {
  if (l == r) return 0;
  long long cnt;
  long long mid = (l + r) / 2;
  cnt = ms(l, mid) + ms(mid + 1, r);
  long long i = l, j = mid + 1;
  long long k = l;
  while (k <= r) {
    if (j > r)
      tmp[k++] = v[i++];
    else if (i > mid)
      tmp[k++] = v[j++];
    else if (v[i] < v[j])
      tmp[k++] = v[i++];
    else
      tmp[k++] = v[j++], cnt += (mid - i + 1);
  }
  for (long long i = l; i < k; i++) v[i] = tmp[i];
  return cnt;
}
int main() {
  map<Ap, long long> id;
  long long ans = 0;
  cin >> n >> w;
  for (long long i = 0; i < n; i++) cin >> ap[i].x >> ap[i].v;
  w = -w;
  stable_sort(ap, ap + n, [](Ap a, Ap b) {
    return abs((a.v + w) * b.x) < abs((b.v + w) * a.x);
  });
  w = -w;
  stable_sort(ap, ap + n, [](Ap a, Ap b) {
    return abs((a.v + w) * b.x) < abs((b.v + w) * a.x);
  });
  for (long long i = 0; i < n; i++) id[ap[i]] = i;
  if (w == 0) return cout << cnt_rep() << endl, 0;
  ans += cnt_rep();
  w = -w;
  stable_sort(ap, ap + n, [](Ap a, Ap b) {
    return abs((a.v + w) * b.x) < abs((b.v + w) * a.x);
  });
  for (long long i = 0; i < n; i++) v[i] = id[ap[i]];
  ans += cnt_rep();
  ans += ms(0, n - 1);
  cout << ans << endl;
}
