#include <bits/stdc++.h>
using namespace std;
bool cmp(pair<double, double>& a, pair<double, double>& b) {
  if (a.first != b.first)
    return a.first < b.first;
  else
    return a.second > b.second;
}
long long inversion_count(vector<double> a) {
  int n = a.size();
  long long count = 0;
  vector<double> v;
  v.push_back(a[n - 1]);
  for (int i = n - 2; i >= 0; i--) {
    vector<double>::iterator it = upper_bound(v.begin(), v.end(), a[i]);
    count += (long long)(it - v.begin());
    v.insert(it, a[i]);
  }
  return count;
}
long long merge(vector<double>& a, int l, int mid, int r) {
  int i = l, j = mid + 1, k = 0;
  double temp[r - l + 1];
  long long count = 0;
  while (i <= mid && j <= r) {
    if (a[i] < a[j])
      temp[k++] = a[i++];
    else {
      count += mid - i + 1;
      temp[k++] = a[j++];
    }
  }
  while (i <= mid) temp[k++] = a[i++];
  while (j <= r) temp[k++] = a[j++];
  for (int p = l; p <= r; p++) a[p] = temp[p - l];
  return count;
}
long long inversion_count2(vector<double>& a, int i, int j) {
  long long count = 0;
  if (i < j) {
    int mid = i + (j - i) / 2;
    count += inversion_count2(a, i, mid);
    count += inversion_count2(a, mid + 1, j);
    count += merge(a, i, mid, j);
  }
  return count;
}
long long fun(int x[], int v[], int n, int w) {
  vector<pair<double, double>> a;
  pair<double, double> p;
  for (int i = 0; i < n; i++) {
    p.first = (double)x[i] * (-1) / (v[i] + w);
    p.second = (double)x[i] * (-1) / (v[i] - w);
    a.push_back(p);
  }
  sort(a.begin(), a.end(), cmp);
  vector<double> arr;
  for (int i = 0; i < n; i++) arr.push_back(a[i].second);
  return inversion_count2(arr, 0, n - 1);
}
int main() {
  int n, w;
  cin >> n >> w;
  int x[n], v[n];
  for (int i = 0; i < n; i++) cin >> x[i] >> v[i];
  cout << fun(x, v, n, w) << endl;
  return 0;
}
