#include <bits/stdc++.h>
using namespace std;
struct node {
  int x, y;
  double v;
  node() {
    x = y = 0;
    v = -99999999;
  }
};
bool cmp(node a, node b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
int cacu(int a, int b) {
  int temp;
  while (a != 0) {
    temp = b % a;
    b = a;
    a = temp;
  }
  return b;
}
int main() {
  int i, j, k;
  node a[1005];
  int x, y, x0, y0;
  int n;
  int zui;
  scanf("%d%d%d", &n, &x, &y);
  for (i = 0; i < n; i++) {
    scanf("%d%d", &x0, &y0);
    a[i].x = x0 - x;
    a[i].y = y0 - y;
    if (a[i].x == 0 && a[i].y == 0) {
      for (j = 0; j < i; j++) {
        if (a[j].x || a[j].y) {
          a[i].x = a[j].x;
          a[i].y = a[j].y;
          break;
        }
      }
    } else {
      if (a[i].x == 0) a[i].y = 1;
      if (a[i].y == 0) a[i].x = 1;
    }
    if (a[i].x && a[i].y) {
      zui = cacu(a[i].x, a[i].y);
      a[i].x = a[i].x / zui;
      a[i].y = a[i].y / zui;
    }
  }
  for (i = 0; i < n; i++) {
    if (a[i].x == 0 && a[i].y == 0) {
      for (j = 0; j < n; j++) {
        if (a[j].x || a[j].y) {
          a[i].x = a[j].x;
          a[i].y = a[j].y;
          break;
        }
      }
    }
  }
  sort(a, a + n, cmp);
  int count = 1;
  for (i = 0; i < n - 1; i++) {
    if (a[i].x != a[i + 1].x || a[i].y != a[i + 1].y) {
      count++;
    }
  }
  printf("%d\n", count);
}
