#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
const int inf = 1e9 + 7;
int n;
long long ans;
double w, x, y;
vector<pair<double, double> > l, r;
int L[N], R[N], fl[N], first[N], FL[N], FR[N];
inline void upd(int v) {
  for (; v <= n; v = (v | (v + 1))) {
    fl[v]++;
  }
}
inline int get(int v) {
  int res = 0;
  for (; v >= 0; v = (v & (v + 1)) - 1) {
    res += fl[v];
  }
  return res;
}
inline void upd1(int v) {
  for (; v <= n; v = (v | (v + 1))) {
    first[v]++;
  }
}
inline int get1(int v) {
  int res = 0;
  for (; v >= 0; v = (v & (v + 1)) - 1) {
    res += first[v];
  }
  return res;
}
inline void upd2(int v) {
  for (; v <= n; v = (v | (v + 1))) {
    FL[v]++;
  }
}
inline int get2(int v) {
  int res = 0;
  for (; v >= 0; v = (v & (v + 1)) - 1) {
    res += FL[v];
  }
  return res;
}
inline void upd3(int v) {
  for (; v <= n; v = (v | (v + 1))) {
    FR[v]++;
  }
}
inline int get3(int v) {
  int res = 0;
  for (; v >= 0; v = (v & (v + 1)) - 1) {
    res += FR[v];
  }
  return res;
}
inline bool cmp(pair<double, int> a, pair<double, int> b) {
  if (a.first < b.first) return 1;
  if (a.first == b.first && L[a.second] > L[b.second]) return 1;
  return 0;
}
inline bool cmp1(pair<double, int> a, pair<double, int> b) {
  if (a.first < b.first) return 1;
  if (a.first == b.first && R[a.second] > R[b.second]) return 1;
  return 0;
}
int main() {
  cin >> n >> w;
  for (int i = 1; i <= n; i++) {
    scanf("%lf%lf", &x, &y);
    if (x < 0)
      l.emplace_back(make_pair(abs(x), y));
    else
      r.emplace_back(make_pair(x, abs(y)));
  }
  vector<pair<double, int> > ol, Or;
  for (int i = 0; i < (int)l.size(); i++) {
    ol.emplace_back(make_pair(l[i].first / (l[i].second + w), i));
  }
  int cnp = 0;
  sort(ol.begin(), ol.end());
  for (int i = 0; i < (int)ol.size(); i++) {
    if (i == 0)
      L[ol[i].second] = cnp;
    else {
      if (ol[i].first == ol[i - 1].first)
        L[ol[i].second] = cnp;
      else
        L[ol[i].second] = ++cnp;
    }
  }
  ol.clear();
  Or.clear();
  for (int i = 0; i < (int)r.size(); i++) {
    Or.emplace_back(make_pair(r[i].first / (r[i].second + w), i));
  }
  cnp = 0;
  sort(Or.begin(), Or.end());
  for (int i = 0; i < (int)Or.size(); i++) {
    if (i == 0)
      R[Or[i].second] = cnp;
    else {
      if (Or[i].first == Or[i - 1].first)
        R[Or[i].second] = cnp;
      else
        R[Or[i].second] = ++cnp;
    }
  }
  ol.clear();
  Or.clear();
  for (int i = 0; i < (int)l.size(); i++) {
    ol.emplace_back(make_pair(l[i].first / (l[i].second - w), i));
  }
  sort(ol.begin(), ol.end(), cmp);
  for (int i = 0; i < (int)ol.size(); i++) {
    int nw = get(L[ol[i].second] - 1);
    ans += (i - nw);
    upd(L[ol[i].second]);
  }
  ol.clear();
  Or.clear();
  for (int i = 0; i < (int)r.size(); i++) {
    Or.emplace_back(make_pair(r[i].first / (r[i].second - w), i));
  }
  sort(Or.begin(), Or.end(), cmp1);
  for (int i = 0; i < (int)Or.size(); i++) {
    int nw = get1(R[Or[i].second] - 1);
    ans += (i - nw);
    upd1(R[Or[i].second]);
  }
  ol.clear();
  for (int i = 0; i < (int)l.size(); i++) {
    ol.emplace_back(make_pair(l[i].first / (l[i].second - w), i));
  }
  for (int i = 0; i < (int)r.size(); i++) {
    ol.emplace_back(
        make_pair(r[i].first / (r[i].second + w), i + (int)l.size()));
  }
  sort(ol.begin(), ol.end());
  cnp = 0;
  for (int i = 0; i < (int)ol.size(); i++) {
    if (i == 0)
      L[ol[i].second] = cnp;
    else {
      if (ol[i].first == ol[i - 1].first)
        L[ol[i].second] = cnp;
      else
        L[ol[i].second] = ++cnp;
    }
  }
  ol.clear();
  for (int i = 0; i < (int)l.size(); i++) {
    ol.emplace_back(make_pair(l[i].first / (l[i].second + w), i));
  }
  for (int i = 0; i < (int)r.size(); i++) {
    ol.emplace_back(
        make_pair(r[i].first / (r[i].second - w), i + (int)l.size()));
  }
  sort(ol.begin(), ol.end(), cmp);
  int cntl = 0, cntr = 0;
  for (int i = 0; i < (int)ol.size(); i++) {
    if (ol[i].second >= (int)l.size()) {
      cntr++;
      int nw = get2(L[ol[i].second] - 1);
      ans += (cntl - nw);
      upd3(L[ol[i].second]);
    } else {
      cntl++;
      int nw = get3(L[ol[i].second] - 1);
      ans += (cntr - nw);
      upd2(L[ol[i].second]);
    }
  }
  cout << ans << endl;
}
