#include <bits/stdc++.h>
using namespace std;
struct Timer {
  static map<string, Timer> ar;
  long long time;
  long long last;
  bool running;
  int count;
  Timer() : time(0), running(false), count(0) {}
  void start() {}
  void stop() {}
  static void start(string name) {}
  static void stop(string name) {}
  long double time_f() { return 0; }
  long double avg_time_f() { return 0; }
};
map<string, Timer> Timer::ar;
struct TimerRegion {
  string name;
  TimerRegion(string _name) : name(_name) { Timer::start(name); }
  ~TimerRegion() { Timer::stop(name); }
};
const int MAXN = (int)1e5 + 100;
int f(int x) { return x & (-x); }
struct Fenvick {
  int ar[MAXN];
  Fenvick(){};
  void add(int i) {
    for (; i >= 0; i -= f(i + 1)) ++ar[i];
  }
  int get(int i) {
    int res = 0;
    for (; i < MAXN; i += f(i + 1)) res += ar[i];
    return res;
  }
} fenvick;
long long invs(int *ar, int n) {
  long long res = 0;
  for (int i = 0; i < n; ++i) {
    res += fenvick.get(ar[i]);
    fenvick.add(ar[i]);
  }
  return res;
}
struct Point {
  int id;
  long long x, y;
  Point() : id(0), x(0), y(0) {}
  Point(long long _x, long long _y) : id(0), x(_x), y(_y) {}
  Point(int _id, long long _x, long long _y) : id(_id), x(_x), y(_y) {}
  Point operator-(Point const &p) const { return Point(x - p.x, y - p.y); }
  long long operator*(Point const &p) const { return x * p.y - y * p.x; }
  long long len2() const { return x * x + y * y; }
};
long long w;
bool comp1(Point const &a, Point const &b) {
  long long p = (a.x > 0 ? a - Point(0, w) : Point(0, w) - a) *
                (b.x > 0 ? b - Point(0, w) : Point(0, w) - b);
  if (p) return p > 0;
  if ((a.x < 0) != (b.x < 0)) return b.x < 0;
  if (a.x < 0) {
    if ((a - Point(0, w)).len2() != (b - Point(0, w)).len2())
      return (a - Point(0, w)).len2() > (b - Point(0, w)).len2();
  } else {
    if ((a - Point(0, w)).len2() != (b - Point(0, w)).len2())
      return (a - Point(0, w)).len2() < (b - Point(0, w)).len2();
  }
  throw;
}
bool comp2(Point const &a, Point const &b) {
  long long p = (a.x > 0 ? a - Point(0, -w) : Point(0, -w) - a) *
                (b.x > 0 ? b - Point(0, -w) : Point(0, -w) - b);
  if (p) return p > 0;
  if ((a.x < 0) != (b.x < 0)) return b.x > 0;
  if (a.x < 0) {
    if ((a - Point(0, -w)).len2() != (b - Point(0, -w)).len2())
      return (a - Point(0, -w)).len2() < (b - Point(0, -w)).len2();
  } else {
    if ((a - Point(0, -w)).len2() != (b - Point(0, -w)).len2())
      return (a - Point(0, -w)).len2() > (b - Point(0, -w)).len2();
  }
  throw;
}
Point inp[MAXN];
int ind[MAXN], ind2[MAXN];
int sign(long long x) { return x > 0 ? 1 : x == 0 ? 0 : -1; }
void solve() {
  TimerRegion timer_func(__FUNCTION__);
  ;
  int n;
  int l = 0, r = 0;
  scanf("%d %lld", &n, &w);
  for (int i = 0; i < n; ++i) {
    int a, b;
    scanf("%d %d", &a, &b);
    inp[i] = Point(i, a, b);
  }
  sort(inp, inp + n, comp1);
  for (int i = 0; i < n; ++i) ind2[inp[i].id] = i;
  sort(inp, inp + n, comp2);
  for (int i = 0; i < n; ++i) ind[i] = ind2[inp[i].id];
  long long ans = invs(ind, n);
  printf("%lld", ans);
}
int main() {
  ios::sync_with_stdio(false);
  solve();
  return 0;
}
