#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
struct rat {
  long long x, y;
  rat(long long x_, long long y_) : x(x_), y(y_) {}
};
bool operator<(const rat& a, const rat& b) { return a.x * b.y < b.x * a.y; }
bool operator==(const rat& a, const rat& b) { return a.x * b.y == b.x * a.y; }
ostream& operator<<(ostream& out, const rat& a) {
  out << a.x << '/' << a.y;
  return out;
}
struct kek {
  rat f;
  rat s;
  int i;
  kek(const rat& _f, const rat& _s, int _i) : f(_f), s(_s), i(_i) {}
};
int const N = 100100;
int t[N];
void upd(int x, int n) {
  for (; x < n; x = (x | (x + 1))) t[x] += 1;
}
int sum(int x, int n) {
  int ans = 0;
  for (; x >= 0; x = (x & (x + 1)) - 1) ans += t[x];
  return ans;
}
long long inverse(const vector<int>& v) {
  int n = v.size();
  long long ans = 0;
  for (int i = 0; i < n; ++i) {
    ans += i - sum(v[i], n);
    upd(v[i], n);
  }
  return ans;
}
int main() {
  int n;
  int w;
  scanf("%d%d", &n, &w);
  std::fill(t, t + n, 0);
  vector<kek> vs;
  for (int i = 0; i < n; ++i) {
    int x, v;
    scanf("%d%d", &x, &v);
    int left = (x < 0) ? 1 : -1;
    x = abs(x);
    v = abs(v);
    vs.emplace_back(rat(x, v + left * w), rat(x, v - left * w), i);
  }
  sort(vs.begin(), vs.end(), [](const kek& a, const kek& b) {
    return a.f < b.f || (a.f == b.f && b.s < a.s);
  });
  if (w == 0) {
    long long ans = 0;
    int last = 0;
    for (int i = 1; i < n; ++i) {
      if (!(vs[i].f == vs[i - 1].f)) {
        ans += (long long)(i - last) * (i - last - 1);
        last = i;
      }
    }
    ans += (long long)(n - last - 1) * (n - last);
    cout << ans / 2 << endl;
    return 0;
  }
  for (int i = 0; i < n; ++i) {
    vs[i].i = i;
  }
  sort(vs.begin(), vs.end(), [](const kek& a, const kek& b) {
    return a.s < b.s || (a.s == b.s && b.f < a.f);
  });
  vector<int> inds;
  for (const auto& k : vs) inds.push_back(k.i);
  cout << inverse(inds) << endl;
}
