#include <bits/stdc++.h>
using namespace std;
struct abc {
  long double x, v, l, r;
  int a, b;
};
abc arr[100005];
set<long double> st;
set<long double>::iterator it;
vector<long double> L, R;
map<long double, int> mp;
long long tree[300004 * 3];
void update(int node, int b, int e, int i) {
  if (i < b || i > e) return;
  if (b == e && i == b) {
    tree[node]++;
    return;
  }
  int left = 2 * node, right = left + 1, mid = (b + e) / 2;
  update(left, b, mid, i);
  update(right, mid + 1, e, i);
  tree[node] = tree[left] + tree[right];
}
long long query(int node, int b, int e, int l, int r) {
  if (b > r || e < l) return 0;
  if (b >= l && e <= r) return tree[node];
  int left = 2 * node, right = left + 1, mid = (b + e) / 2;
  long long p = query(left, b, mid, l, r);
  long long q = query(right, mid + 1, e, l, r);
  return p + q;
}
bool comp1(abc a, abc b) {
  if (a.a == b.a) return a.b > b.b;
  return a.a < b.a;
}
bool comp2(abc a, abc b) {
  if (a.b == b.b) return a.a > b.a;
  return a.b < b.b;
}
int main() {
  int n;
  long double w;
  scanf("%d %llf", &n, &w);
  for (int i = 1; i <= n; i++) {
    scanf("%llf %llf", &arr[i].x, &arr[i].v);
    long double a = arr[i].x / (arr[i].v + w);
    long double b = arr[i].x / (arr[i].v - w);
    if (a < 0.0) a = -1.0 * a;
    if (b < 0.0) b = -1.0 * b;
    arr[i].l = a;
    arr[i].r = b;
    st.insert(a);
    st.insert(b);
  }
  for (int i = 1; i <= n; i++) {
    if (arr[i].x < 0) {
      L.push_back(arr[i].l);
      R.push_back(arr[i].r);
    }
  }
  sort(L.begin(), L.end());
  sort(R.begin(), R.end());
  long long ans = 0;
  int PP = 0;
  for (it = st.begin(); it != st.end(); it++) {
    mp[*it] = ++PP;
  }
  for (int i = 1; i <= n; i++) {
    arr[i].a = mp[arr[i].l];
    arr[i].b = mp[arr[i].r];
  }
  for (int i = 1; i <= n; i++) {
    if (arr[i].x < 0) continue;
    long long a =
        lower_bound(R.begin(), R.end(), min(arr[i].l, arr[i].r)) - R.begin();
    long long b =
        upper_bound(L.begin(), L.end(), max(arr[i].r, arr[i].l)) - L.begin();
    b = L.size() - b;
    long long p = L.size() - (a + b);
    ans += p;
  }
  sort(arr + 1, arr + n + 1, comp1);
  for (int i = 1; i <= n; i++) {
    if (arr[i].v < 0.0) continue;
    ans += query(1, 1, PP, arr[i].b, PP);
    update(1, 1, PP, arr[i].b);
  }
  memset(tree, 0, sizeof(tree));
  sort(arr + 1, arr + n + 1, comp2);
  for (int i = 1; i <= n; i++) {
    if (arr[i].v > 0.0) continue;
    ans += query(1, 1, PP, arr[i].a, PP);
    update(1, 1, PP, arr[i].a);
  }
  printf("%I64d\n", ans);
}
