#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int n;
long long bit[maxn], w;
struct node {
  long long p, q1, q2;
  inline bool operator<(const node &rhs) const {
    if (p * rhs.q1 != rhs.p * q1) return p * rhs.q1 < rhs.p * q1;
    return p * rhs.q2 > rhs.p * q2;
  }
} a[maxn];
inline bool cmp(pair<long long, long long> p1, pair<long long, long long> p2) {
  return p1.first * p2.second < p2.first * p1.second;
}
long long gcd(long long a, long long b) { return !b ? a : gcd(b, a % b); }
vector<pair<long long, long long> > v;
inline void add(int x) {
  while (x <= n) {
    ++bit[x];
    x += x & -x;
  }
}
inline long long sum(int x) {
  long long ret = 0;
  while (x) {
    ret += bit[x];
    x -= x & -x;
  }
  return ret;
}
inline int id(pair<long long, long long> p) {
  return lower_bound(v.begin(), v.end(), p, cmp) - v.begin() + 1;
}
vector<node> up, down;
int main() {
  scanf("%d%I64d", &n, &w);
  for (int i = 1; i <= n; ++i) {
    long long x, t;
    scanf("%I64d%I64d", &x, &t);
    a[i].p = abs(x);
    a[i].q1 = abs(t) + abs(w);
    a[i].q2 = abs(t) - abs(w);
    if (x > 0) swap(a[i].q1, a[i].q2);
    v.push_back(pair<long long, long long>(a[i].p, a[i].q2));
  }
  sort(a + 1, a + 1 + n);
  for (int i = 0; i < n; ++i) {
    long long _gcd = gcd(v[i].first, v[i].second);
    v[i].first /= _gcd;
    v[i].second /= _gcd;
  }
  sort(v.begin(), v.end(), cmp);
  v.erase(unique(v.begin(), v.end()), v.end());
  long long res = 0;
  for (int i = 1; i <= n; ++i) {
    long long _gcd = gcd(a[i].p, a[i].q2);
    int x = id(pair<long long, long long>(a[i].p / _gcd, a[i].q2 / _gcd));
    res += sum(n) - sum(x - 1);
    add(x);
  }
  return cout << res << endl, 0;
}
