#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct pla {
  double td, tc;
  int idx;
};
int n;
double w;
pla a[N];
int pos[N], l[N];
vector<pair<double, int>> s;
bool ss(pla tr, pla s) { return (tr.td != s.td) ? tr.td < s.td : tr.tc < s.tc; }
int p[N];
long long get(int vt) {
  long long vr = 0;
  for (int i = vt; i; i -= (i & -i)) vr += p[i];
  return vr;
}
void update(int vt) {
  for (int i = vt; i <= n; i += (-i & i)) p[i]++;
}
int main() {
  cin >> n >> w;
  for (int i = 1; i <= n; i++) {
    double x, v;
    cin >> x >> v;
    a[i].idx = i;
    a[i].td = abs(x / (v - w));
    a[i].tc = abs(x / (v + w));
    s.push_back({-abs(x / (v + w)), i});
  }
  sort(s.begin(), s.end());
  pos[s[0].second] = 1;
  for (int i = 1; i < n; i++) {
    if (s[i].first > s[i - 1].first)
      pos[s[i].second] = pos[s[i - 1].second] + 1;
    else
      pos[s[i].second] = pos[s[i - 1].second];
  }
  sort(a + 1, a + 1 + n, ss);
  long long res = 0, cur = 1;
  for (int i = 1; i <= n; i++) {
    l[i] = get(pos[a[i].idx]) + i - cur;
    res += l[i];
    if (i < n && a[i].td != a[i + 1].td) {
      for (int j = cur; j <= i; j++) update(pos[a[j].idx]);
      cur = i + 1;
    }
  }
  cout << res;
  return 0;
}
