#include <bits/stdc++.h>
using namespace std;
int mark[(10000000 >> 5) + 1];
void sieve() {
  register int i, j, k;
  (mark[1 >> 5] |= 1 << (1 & 31));
  int n = 10000000;
  for (i = 2; i <= n; i++) {
    if (!(mark[i >> 5] >> (i & 31) & 1)) {
      for (k = n / i, j = i * k; k >= i; k--, j -= i)
        (mark[j >> 5] |= 1 << (j & 31));
    }
  }
}
long long C(long long n, long long k) {
  if (k == 0) return 1;
  return (n * C(n - 1, k - 1)) / k;
}
long long modular_pow(long long budgetase, long long exponent, int modulus) {
  long long result = 1;
  while (exponent > 0) {
    if (exponent % 2 == 1) result = (result * budgetase) % modulus;
    exponent = exponent >> 1;
    budgetase = (budgetase * budgetase) % modulus;
  }
  return result;
}
long long binaryToDec(string number) {
  long long result = 0, pow = 1;
  for (int i = number.length() - 1; i >= 0; --i, pow <<= 1)
    result = (result + (number[i] - '0') * pow) % 1000003;
  return result;
}
int GCD(int a, int b) { return b == 0 ? a : GCD(b, a % b); }
struct Point {
  int x, y;
  bool check;
};
Point P[1005];
int main() {
  int n, x, y;
  scanf("%d%d%d", &n, &x, &y);
  for (int i = 0; i < n; i++)
    scanf("%d%d", &P[i].x, &P[i].y), P[i].check = false;
  int ans = 0;
  for (int i = 0; i < n; i++) {
    if (P[i].check) continue;
    ans++;
    for (int j = 0; j < n; j++) {
      if (P[j].check || i == j) continue;
      if ((P[i].x - x) * (P[j].y - y) == (P[j].x - x) * (P[i].y - y))
        P[j].check = true;
    }
  }
  printf("%d\n", ans);
  return 0;
}
