#include <bits/stdc++.h>
using namespace std;
const double PI = 3.14159265359;
long long inf = 4000000000000000000LL;
long long modulo = pow(10, 9) + 7;
double eps = 1e-6;
const long long mod = 1000000007;
long long min(long long a, long long b) { return a < b ? a : b; }
long long max(long long a, long long b) { return a > b ? a : b; }
const long long N = 1000050;
const long long sz = (long long)1000000 + 80;
long long S[sz * 4], mx[sz * 4];
long long Q;
void RI() {}
template <typename... T>
void RI(long long& head, T&... tail) {
  scanf("%lld", &head);
  RI(tail...);
}
int k, pref[N], mini = 25, maxi = -5, ind = 1, r, a, b, z, d, g, m, ans = 0,
                cem = 0, t = 1, last = 0, l, c, x1, x2;
string he = "YES", yox = "NO";
map<pair<long long, long long>, long long> necedi;
long long summa = 0;
vector<long long> adj[100008];
long long n;
bool comparee(pair<double, double> evvel, pair<double, double> son) {
  if (evvel.first < son.first) return 1;
  if (evvel.first == son.first) {
    if (evvel.second > son.second) return 1;
    return 0;
  }
  return 0;
}
long long getSum(long long BITree[], long long index) {
  long long sum = 0;
  while (index > 0) {
    sum += BITree[index];
    index -= index & (-index);
  }
  return sum;
}
void updateBIT(long long BITree[], int n, int index, int val) {
  while (index <= n) {
    BITree[index] += val;
    index += index & (-index);
  }
}
long long getInvCount(int arr[], int n) {
  long long invcount = 0;
  int maxElement = 0;
  for (int i = 0; i < n; i++)
    if (maxElement < arr[i]) maxElement = arr[i];
  long long BIT[maxElement + 1];
  for (long long i = 1; i <= maxElement; i++) BIT[i] = 0;
  for (long long i = n - 1; i >= 0; i--) {
    invcount += getSum(BIT, arr[i]);
    updateBIT(BIT, maxElement, arr[i], 1);
  }
  return invcount;
}
int main() {
  long long t;
  t = 1;
  int l;
  while (t--) {
    double x1, y1, w, z1, x2, y2, z2;
    cin >> n >> w;
    vector<pair<double, double> > teyyare(n, {0.0, 0.0});
    long long maxu = 0;
    for (int i = 0; i < n; ++i) {
      cin >> teyyare[i].first >> teyyare[i].second;
    }
    vector<double> tezesidi;
    for (int i = 0; i < n; i++) {
      pair<double, double> helebele = *(teyyare.begin() + i);
      if (helebele.first > 0)
        teyyare[i].first = abs(helebele.first) / (abs(helebele.second) + w),
        teyyare[i].second = abs(helebele.first) / (abs(helebele.second) - w);
      else if (helebele.first <= 0)
        teyyare[i].first = abs(helebele.first) / (abs(helebele.second) - w),
        teyyare[i].second = abs(helebele.first) / (abs(helebele.second) + w);
      tezesidi.push_back(teyyare[i].second);
    }
    sort(tezesidi.begin(), tezesidi.end());
    map<double, int> senol;
    int j = 1;
    for (double i : tezesidi) {
      if (!senol.count(i)) senol[i] = j++;
    }
    int arr[(long long)(teyyare.size())];
    sort(teyyare.begin(), teyyare.end(), comparee);
    int y = 0;
    for (pair<double, double> i : teyyare) {
      arr[y++] = senol[i.second];
    }
    maxu = getInvCount(arr, n);
    cout << maxu << "\n";
  }
}
