#include <bits/stdc++.h>
using namespace std;
const int N = 512345, lgN = 20, rootN = 1123;
const double eps = 1e-18;
int r[N], w[N];
vector<double> positive, negative;
double p[N];
int main() {
  int n, c, d;
  cin >> n >> c >> d;
  for (int i = 1; i <= n; ++i) {
    cin >> r[i] >> w[i];
    r[i] -= c, w[i] -= d;
    p[i] = (((double)r[i]) / (double)w[i]);
  }
  for (int i = 1; i <= n; ++i) {
    double x = (((double)r[i]) / (double)w[i]);
    if (w[i] > 0) {
      positive.push_back(x);
    } else if (w[i] < 0) {
      negative.push_back(x);
    }
  }
  sort(positive.begin(), positive.end());
  sort(negative.begin(), negative.end());
  long long first = 0, second = 0;
  for (int i = 0; i < positive.size(); ++i) {
    first += (lower_bound(negative.begin(), negative.end(), positive[i]) -
              negative.begin());
  }
  for (int i = 0; i < negative.size(); ++i) {
    second += (lower_bound(positive.begin(), positive.end(), negative[i]) -
               positive.begin());
  }
  long long ans = 0;
  for (int i = 1; i <= n; ++i) {
    if (w[i] > 0) {
      ans += ((long long)(negative.end() - upper_bound(negative.begin(),
                                                       negative.end(), p[i]))) *
             (lower_bound(negative.begin(), negative.end(), p[i]) -
              negative.begin());
    } else if (w[i] < 0) {
      ans += ((long long)(positive.end() - upper_bound(positive.begin(),
                                                       positive.end(), p[i]))) *
             (lower_bound(positive.begin(), positive.end(), p[i]) -
              positive.begin());
    } else if (w[i] == 0) {
      if (r[i] < 0)
        ans += first;
      else
        ans += second;
    }
  }
  printf("%lld\n", ans);
  return 0;
}
