#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
using ll = long long;
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }
struct Frac {
  int num, den;
  void simp() {
    int tmp = gcd(num, den);
    num /= tmp;
    den /= tmp;
  }
  Frac(int num, int den) : num(num), den(den) { simp(); }
  Frac() = default;
};
inline bool operator<(const Frac &a, const Frac &b) {
  return a.den * 1ll * b.num < a.num * 1ll * b.den;
}
inline bool operator!=(const Frac &a, const Frac &b) { return a < b || b < a; }
int c[N], n, w;
inline int lowbit(int x) { return x & -x; }
void add(int pos, int v) {
  while (pos <= n) c[pos] += v, pos += lowbit(pos);
}
ll sum(int pos) {
  ll ret = 0;
  while (pos) ret += c[pos], pos -= lowbit(pos);
  return ret;
}
pair<Frac, Frac> t[N];
pair<Frac, int> d[N];
int rnk[N];
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> w;
  for (int i = 1; i <= n; i++) {
    int t1, t2;
    cin >> t1 >> t2;
    t[i] = {Frac(-t1, t2 - w), Frac(-t1, t2 + w)};
  }
  for (int i = 1; i <= n; i++) t[i].second.num *= -1;
  sort(t + 1, t + n + 1);
  for (int i = 1; i <= n; i++) t[i].second.num *= -1;
  for (int i = 1; i <= n; i++) d[i] = {t[i].second, i};
  sort(d + 1, d + n + 1);
  int idx = 0;
  for (int i = 1; i <= n; i++) {
    if (i == 1 || d[i].first != d[i - 1].first) ++idx;
    rnk[d[i].second] = idx;
  }
  ll ans = 0;
  for (int i = 1; i <= n; i++) {
    ans += sum(n) - sum(rnk[i] - 1);
    add(rnk[i], 1);
  }
  cout << ans << endl;
  return 0;
}
