#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.141592653589793;
const int INF = 2e9 + 10;
const long long LONGINF = 4e18;
const long long INF2 = 1e17 + 10;
const long long mod = 998244353;
struct frac {
  long long num, denom;
  int i;
  bool operator<(const frac& f) const { return num * f.denom < f.num * denom; }
  bool operator==(const frac& f) const {
    return num * f.denom == f.num * denom;
  }
};
bool cmp(const pair<frac, frac>& a, const pair<frac, frac>& b) {
  if (a.first == b.first) {
    return b.second < a.second;
  }
  return a.first < b.first;
}
long long T[100100];
void add(int p) {
  for (int i = p; i < 100100; i |= i + 1) T[i] += 1;
}
long long sum(int p) {
  long long ans = 0;
  for (int i = p; i >= 0; i = (i & (i + 1)) - 1) ans += T[i];
  return ans;
}
void solve() {
  int n, w;
  cin >> n >> w;
  vector<pair<frac, frac> > pl;
  vector<frac> srt;
  map<frac, int> pos;
  for (int i = 0; i < n; ++i) {
    long long x, v;
    cin >> x >> v;
    frac f, f2;
    f.num = llabs(-x);
    f.denom = llabs(v - w);
    f.i = i;
    f2.num = llabs(-x);
    f2.denom = llabs(v + w);
    f2.i = i;
    pl.push_back({f, f2});
    srt.push_back(f2);
  }
  sort(srt.begin(), srt.end());
  long cnt = unique(srt.begin(), srt.end()) - srt.begin();
  reverse(srt.begin(), srt.begin() + cnt);
  for (int i = 0; i < cnt; ++i) {
    pos[srt[i]] = i;
  }
  long long ans = 0;
  sort(pl.begin(), pl.end(), cmp);
  for (int i = 0; i < n; ++i) {
    int p = pos[pl[i].second];
    ans += sum(p);
    add(p);
  }
  cout << ans << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.precision(20);
  solve();
  return 0;
}
