#include <bits/stdc++.h>
constexpr double EPS = 1e-9;
using namespace std;
int tr[100001];
void add(int in) {
  while (in <= 100000) {
    tr[in]++;
    in += in & -in;
  }
}
long long get(int in) {
  long long res = 0;
  while (in) {
    res += tr[in];
    in -= in & -in;
  }
  return res;
}
int n;
long long count_inversions(int arr[]) {
  memset(tr, 0, sizeof(tr));
  long long res = 0;
  for (int i = n - 1; i >= 0; i--) {
    res += get(arr[i]);
    add(arr[i]);
  }
  return res;
}
struct Plane {
  int x;
  int v;
};
int main() {
  int w;
  scanf("%d %d", &n, &w);
  Plane planes[n];
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &planes[i].x, &planes[i].v);
  }
  pair<double, int> ss[n];
  for (int i = 0; i < n; i++) {
    ss[i].first = abs((double)planes[i].x / planes[i].v);
    ss[i].second = i + 1;
  }
  sort(ss, ss + n);
  int mp[n + 1];
  for (int i = 0; i < n; i++) {
    mp[ss[i].second] = i + 1;
  }
  pair<double, int> qq[n];
  for (int i = 0; i < n; i++) {
    planes[i].v += w;
    qq[i].first = abs((double)planes[i].x / planes[i].v);
    qq[i].second = i + 1;
  }
  sort(qq, qq + n,
       [&mp](const pair<double, int> &a, const pair<double, int> &b) {
         return make_pair(a.first, mp[b.second]) <
                make_pair(b.first, mp[a.second]);
       });
  int mm[n];
  for (int i = 0; i < n; i++) {
    mm[i] = (mp[qq[i].second]);
  }
  pair<double, int> zz[n];
  for (int i = 0; i < n; i++) {
    planes[i].v -= 2 * w;
    zz[i].first = abs((double)planes[i].x / planes[i].v);
    zz[i].second = i + 1;
  }
  sort(zz, zz + n,
       [&mp](const pair<double, int> &a, const pair<double, int> &b) {
         return make_pair(a.first, mp[b.second]) <
                make_pair(b.first, mp[a.second]);
       });
  int rr[n];
  for (int i = 0; i < n; i++) {
    rr[i] = (mp[zz[i].second]);
  }
  cout << (w != 0 ? count_inversions(rr) : 0) + count_inversions(mm);
}
