#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int Index[maxn];
int c[maxn], e;
inline int lowbit(int x) { return x & (-x); }
struct node {
  long long x;
  long long v;
  long long w;
  int id;
} a[maxn], b[maxn];
bool check(int i, int j) {
  return abs(a[i].x) * abs(a[j].v + a[j].w) ==
         abs(a[j].x) * abs(a[i].v + a[i].w);
}
void add(int x) {
  while (x <= e) {
    c[x]++;
    x += lowbit(x);
  }
}
int getsum(int x) {
  int res = 0;
  while (x) {
    res += c[x];
    x -= lowbit(x);
  }
  return res;
}
bool cmp1(node a, node b) {
  return abs(a.x) * abs(b.v + b.w) < abs(b.x) * abs(a.v + a.w);
}
bool cmp2(node a, node b) {
  long long x = abs(a.x) * abs(b.v + b.w);
  long long y = abs(b.x) * abs(a.v + a.w);
  return x == y ? Index[a.id] < Index[b.id] : x < y;
}
int main() {
  int n, w;
  scanf("%d%d", &n, &w);
  for (int i = 1; i <= n; i++) {
    scanf("%lld%lld", &a[i].x, &a[i].v);
    a[i].w = w;
    a[i].id = i;
    b[i] = a[i];
    b[i].w = -w;
  }
  long long ans = 0;
  sort(a + 1, a + n + 1, cmp1);
  Index[a[n].id] = ++e;
  for (int i = n - 1; i >= 1; i--) {
    if (check(i, i + 1)) {
      Index[a[i].id] = Index[a[i + 1].id];
    } else {
      Index[a[i].id] = ++e;
    }
  }
  sort(b + 1, b + n + 1, cmp2);
  for (int i = 1; i <= n; i++) {
    ans += getsum(Index[b[i].id]);
    add(Index[b[i].id]);
  }
  printf("%lld\n", ans);
  return 0;
}
