#include <bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize(2)
#pragma GCC optimize("Ofast")
using namespace std;
struct fraction {
  long long num, den;
  fraction(long long num = 1, long long den = 1) {
    this->num = num, this->den = den;
    if (this->den < 0) this->den *= -1, this->num *= -1;
  }
  bool operator==(fraction other) const {
    return other.den * num == other.num * den;
  }
  bool operator<(fraction other) const {
    return num * other.den < other.num * den;
  }
  bool operator>(fraction other) const {
    return num * other.den > other.num * den;
  }
  bool operator!=(fraction other) const {
    return (other.den * num) != (other.num * den);
  }
  void print() { cout << num << "/" << den << endl; }
};
pair<fraction, fraction> vc[100111];
fraction tmp[100111];
static bool cmp(const pair<fraction, fraction> &f1,
                const pair<fraction, fraction> &f2) {
  if (f1.first != f2.first) return f1.first < f2.first;
  return f1.second > f2.second;
}
long long divc(int l, int r) {
  if (l == r) return 0ll;
  if (l > r) return 0ll;
  int mid = l + (r - l) / 2;
  long long L = divc(l, mid), R = divc(mid + 1, r);
  int i = l, j = mid + 1, k = l;
  long long cross = 0ll;
  while (i <= mid && j <= r) {
    if (vc[i].second < vc[j].second) {
      tmp[k++] = vc[i++].second;
    } else {
      tmp[k++] = vc[j++].second;
      cross += (long long)(mid - i + 1);
    }
  }
  while (i <= mid) tmp[k++] = vc[i++].second;
  while (j <= r) tmp[k++] = vc[j++].second;
  for (i = l; i <= r; i++) vc[i].second = tmp[i];
  return L + R + cross;
}
int main() {
  int n, w;
  int i;
  scanf("%d%d", &n, &w);
  for (i = 1; i <= n; ++i) {
    int x, v;
    scanf("%d%d", &x, &v);
    vc[i].first = fraction(x, v - w);
    vc[i].second = fraction(x, v + w);
  }
  sort(vc + 1, vc + 1 + n, cmp);
  cout << divc(1, n) << endl;
  return 0;
}
