#include <bits/stdc++.h>
using namespace std;
int x[100005], v[100005];
map<long double, int> ht;
vector<pair<int, int> > arr;
bool cmp(pair<int, int> a, pair<int, int> b) {
  if (a.first == b.first) a.second > b.second;
  return a.first < b.first;
}
int ft[200005];
void update(int i, int a) {
  for (; i <= 200000; i += (i & -i)) ft[i] += a;
}
int query(int i) {
  int res = 0;
  for (; i > 0; i -= (i & -i)) res += ft[i];
  return res;
}
int main() {
  int n;
  long double w;
  scanf("%d%Lf", &n, &w);
  w += 1e-6;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &x[i], &v[i]);
    long double lo = (long double)x[i] / (v[i] + w),
                hi = (long double)x[i] / (v[i] - w);
    ht[lo] = 1;
    ht[hi] = 1;
  }
  int rk = 1;
  for (map<long double, int>::iterator its = ht.begin(); its != ht.end(); its++)
    its->second = rk++;
  for (int i = 1; i <= n; i++) {
    long double lo = (long double)x[i] / (v[i] + w),
                hi = (long double)x[i] / (v[i] - w);
    arr.push_back(pair<int, int>(ht[lo], ht[hi]));
  }
  sort(arr.begin(), arr.end(), cmp);
  long long ans = 0;
  for (int i = 0; i < arr.size(); i++) {
    ans += query(2 * n) - query(arr[i].second - 1);
    update(arr[i].second, 1);
  }
  printf("%lld\n", ans);
}
