#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool d = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') d = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return d ? x : -x;
}
inline unsigned long long rnd() {
  return ((unsigned long long)rand() << 30 ^ rand()) << 4 | rand() % 4;
}
const int N = 1e5 + 5;
struct info {
  double l, r;
  bool operator<(const info &rhs) const {
    return r == rhs.r ? l > rhs.l : r < rhs.r;
  }
} a[N];
double F(int x, int y) {
  x = abs(x);
  y = abs(y);
  return (double)x / y;
}
double b[N];
int c[N], m;
void add(int x) {
  for (int i = x; i <= m; i += (i & -i)) c[i]++;
}
int find(int x) {
  int res = 0;
  for (int i = x; i; i -= (i & -i)) res += c[i];
  return res;
}
int main() {
  int n = read(), w = read();
  for (int i = (int)(1); i <= (int)(n); i++) {
    int x = read(), v = read();
    a[i].l = F(x, v - w);
    a[i].r = F(x, v + w);
    b[i] = a[i].l;
  }
  sort(b + 1, b + n + 1);
  m = unique(b + 1, b + n + 1) - b - 1;
  for (int i = (int)(1); i <= (int)(n); i++)
    a[i].l = lower_bound(b + 1, b + m + 1, a[i].l) - b;
  sort(a + 1, a + n + 1);
  long long ans = 0;
  for (int i = (int)(1); i <= (int)(n); i++) {
    ans += i - 1 - find(a[i].l - 1);
    add(a[i].l);
  }
  cout << ans;
}
