#include <bits/stdc++.h>
using namespace std;
int x[100010], v[100010];
int n, w;
struct P {
  double a, b;
  bool operator<(const P& c) const {
    if (a != c.a) return a < c.a;
    return b > c.b;
  }
} a[100010];
vector<double> V;
double c[100010];
int d[100010];
int bit[100010];
void add(int x, int d) {
  for (int i = x; i <= n; i += i & -i) bit[i] += d;
}
int query(int x) {
  int ret = 0;
  for (int i = x; i; i -= i & -i) ret += bit[i];
  return ret;
}
int main() {
  scanf("%d%d", &n, &w);
  for (int i = 1; i <= n; i++) scanf("%d%d", &x[i], &v[i]);
  for (int i = 1; i <= n; i++)
    a[i] = {(double)(v[i] - w) / (double)x[i],
            (double)(v[i] + w) / (double)x[i]};
  sort(a + 1, a + n + 1);
  for (int i = 1; i <= n; i++) c[i] = a[i].b, V.push_back(c[i]);
  sort(V.begin(), V.end());
  V.resize(unique(V.begin(), V.end()) - V.begin());
  for (int i = 1; i <= n; i++)
    d[i] = lower_bound(V.begin(), V.end(), c[i]) - V.begin() + 1;
  long long ans = 0;
  for (int i = 1; i <= n; i++) {
    ans += query(n - d[i] + 1);
    add(n - d[i] + 1, 1);
  }
  printf("%lld\n", ans);
  return 0;
}
