#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
struct DATA {
  long long r, w;
  long double rw;
  long long u;
  DATA() {}
  DATA(long long R, long long W) {
    r = R, w = W, rw = w == 0 ? r : (long double)r / (long double)w;
  }
  DATA(long double Rw) { rw = Rw; }
  bool operator<(const DATA &p) const { return rw < p.rw; }
  bool operator>(const DATA &p) const { return rw > p.rw; }
};
int n;
long long C, D;
DATA a[400000];
vector<DATA> pl, mi, ze;
int main() {
  int i, j, k;
  cin >> n >> C >> D;
  for (i = 0; i < n; i++) {
    scanf("%lld%lld", &a[i].r, &a[i].w), a[i].r -= C, a[i].w -= D;
    a[i] = DATA(a[i].r, a[i].w);
    if (!a[i].w)
      ze.push_back(a[i]);
    else if (a[i].w > 0)
      pl.push_back(a[i]);
    else
      mi.push_back(a[i]);
  }
  sort((ze).begin(), (ze).end()), sort((pl).begin(), (pl).end()),
      sort((mi).begin(), (mi).end());
  long long dab = 0;
  for (auto e : mi) {
    long long x =
        lower_bound((pl).begin(), (pl).end(), DATA(e.rw)) - pl.begin();
    long long y =
        pl.size() -
        (upper_bound((pl).begin(), (pl).end(), DATA(e.rw)) - pl.begin());
    dab += x * y;
  }
  for (auto e : pl) {
    long long x =
        lower_bound((mi).begin(), (mi).end(), DATA(e.rw)) - mi.begin();
    long long y =
        mi.size() -
        (upper_bound((mi).begin(), (mi).end(), DATA(e.rw)) - mi.begin());
    dab += x * y;
  }
  long long xmi = 0, xpl = 0;
  for (auto &e : mi)
    xmi += lower_bound((pl).begin(), (pl).end(), DATA(e.rw)) - pl.begin();
  for (auto &e : pl)
    xpl += lower_bound((mi).begin(), (mi).end(), DATA(e.rw)) - mi.begin();
  for (auto e : ze) {
    if (e.r > 0)
      dab += xmi;
    else
      dab += xpl;
  }
  cout << dab;
  return 0;
}
