#include <bits/stdc++.h>
using namespace std;
struct frac {
  long long x, y;
  frac(long long _x, long long _y) : x(_x), y(_y) {}
  double value() { return x * 1.0 / y; }
};
bool operator==(frac a, frac b) { return a.x * b.y == a.y * b.x; }
bool operator<(frac a, frac b) {
  if (b.y * a.y < 0) return a.x * b.y > a.y * b.x;
  return a.x * b.y < a.y * b.x;
}
int bit1[200009], bit2[200009];
void update(int bit[], int i) {
  while (i < 200009) {
    bit[i]++;
    i += (i & -i);
  }
}
int rsq(int bit[], int i) {
  int ans = 0;
  while (i > 0) {
    ans += bit[i];
    i -= (i & -i);
  }
  return ans;
}
int rsq(int bit[], int i, int j) { return rsq(bit, j) - rsq(bit, i - 1); }
int N, w;
vector<pair<frac, frac> > lines;
int main() {
  scanf("%d %d", &N, &w);
  map<frac, int> x2id;
  for (int i = 0; (i) < (N); (i)++) {
    int x, v;
    scanf("%d %d", &x, &v);
    frac a = frac(1, x);
    frac b = frac(v, x);
    frac t1 = frac(v - w, x);
    frac t2 = frac(v + w, x);
    lines.push_back(pair<frac, frac>(a, b));
    x2id[t1] = 0;
    x2id[t2] = 0;
  }
  sort(lines.begin(), lines.end());
  int cnt = 0;
  for (auto& p : x2id) {
    p.second = ++cnt;
  }
  long long ans = 0;
  for (pair<frac, frac> l : lines) {
    frac a = l.first;
    frac b = l.second;
    long long v = b.x;
    long long x = b.y;
    frac t1 = frac(v - w, x);
    frac t2 = frac(v + w, x);
    int i1 = x2id[t1];
    int i2 = x2id[t2];
    int d1 = rsq(bit1, i1, cnt);
    int d2 = rsq(bit2, i2 + 1, cnt);
    ans += d1 - d2;
    update(bit1, i1);
    update(bit2, i2);
  }
  printf("%I64d\n", ans);
  return 0;
}
