#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
  while (b) {
    a %= b;
    swap(a, b);
  }
  return a;
}
struct D {
  int a, b;
  D(int x, int y) : a(x), b(y) {
    int g = gcd(a, b);
    a /= g;
    b /= g;
  }
  bool operator<(D const& o) const& { return a * 1LL * o.b < o.a * 1LL * b; }
  bool operator!=(D const& o) const& {
    return make_pair(a, b) != make_pair(o.a, o.b);
  }
};
int main() {
  int n, w;
  cin >> n >> w;
  vector<int> x(n), v(n);
  for (int i = 0; i < n; ++i) cin >> x[i] >> v[i];
  vector<pair<D, D> > lf;
  lf.reserve(n);
  for (int i = 0; i < n; ++i) {
    if (x[i] <= 0) {
      lf.push_back(make_pair(D(-x[i], v[i] + w), D(-x[i], v[i] - w)));
    } else {
      lf.push_back(make_pair(D(x[i], -v[i] - w), D(x[i], -v[i] + w)));
    }
  }
  sort(lf.begin(), lf.end());
  vector<D> rs;
  rs.reserve(n);
  for (int i = 0; i < n; ++i) rs.push_back(lf[i].second);
  sort(rs.rbegin(), rs.rend());
  map<D, int> id;
  for (int i = 0; i < n; ++i) id[rs[i]] = i;
  vector<int> t(n, 0);
  auto sum = [&](int r) {
    int result = 0;
    for (; r >= 0; r = (r & (r + 1)) - 1) result += t[r];
    return result;
  };
  auto inc = [&](int i, int delta) {
    for (; i < n; i = (i | (i + 1))) t[i] += delta;
  };
  long long res = 0;
  int cnt = 0;
  for (int i = 0; i < n; ++i) {
    res += sum(id[lf[i].second]);
    inc(id[lf[i].second], 1);
    if (i > 0 && lf[i - 1].first != lf[i].first) {
      cnt = 0;
    } else if (i > 0 && lf[i - 1].second != lf[i].second) {
      ++cnt;
    }
    res += cnt;
  }
  cout << res;
}
