#include <bits/stdc++.h>
using namespace std;
struct element {
  long long value, size_right;
  element *left, *right;
};
element *insert_BST(element *BST, long long value, long long &count) {
  element *temp = BST, *e = new element;
  e->value = value;
  e->size_right = 0;
  e->left = NULL;
  e->right = NULL;
  if (temp == NULL)
    BST = new element(*e);
  else {
    while (temp != NULL) {
      if (e->value > temp->value) {
        temp->size_right++;
        if (temp->right == NULL) {
          temp->right = e;
          break;
        }
        temp = temp->right;
      } else if (e->value < temp->value) {
        count++;
        count += temp->size_right;
        if (temp->left == NULL) {
          temp->left = e;
          break;
        }
        temp = temp->left;
      }
    }
  }
  return BST;
}
int min_x(int a, int b) {
  if (a < b)
    return a;
  else
    return b;
}
unsigned int edit_distance(const std::string &s1, const std::string &s2) {
  const std::size_t len1 = s1.size(), len2 = s2.size();
  std::vector<std::vector<unsigned int>> d(len1 + 1,
                                           std::vector<unsigned int>(len2 + 1));
  d[0][0] = 0;
  for (unsigned int i = 1; i <= len1; ++i) d[i][0] = i;
  for (unsigned int i = 1; i <= len2; ++i) d[0][i] = i;
  for (unsigned int i = 1; i <= len1; ++i)
    for (unsigned int j = 1; j <= len2; ++j)
      d[i][j] = std::min(std::min(d[i - 1][j] + 1, d[i][j - 1] + 1),
                         d[i - 1][j - 1] + (s1[i - 1] == s2[j - 1] ? 0 : 1));
  return d[len1][len2];
}
bool Win(int sum, int count, int player, int *a) {
  if (sum == 31)
    if (count % 2 == player)
      return true;
    else
      return false;
  if (sum > 31)
    if (count % 2 == player)
      return false;
    else
      return true;
  if (sum < 31) {
    for (long long i = 1; i < 7; i++) {
      if (a[i - 1]) {
        a[i - 1]--;
        if (count % 2 == player) {
          if (Win(sum + i, count + 1, player, a)) {
            a[i - 1]++;
            return true;
          }
          a[i - 1]++;
        } else {
          if (Win(sum + i, count + 1, player, a)) {
            a[i - 1]++;
            return false;
          }
          a[i - 1]++;
        }
      }
    }
    if (count % 2 == player)
      return false;
    else
      return true;
  }
}
int main() {
  double n, x0, y0;
  cin >> n >> x0 >> y0;
  vector<pair<double, double>> vp;
  vector<bool> vis(n + 1, false);
  for (long long i = 0; i < n; i++) {
    double x, y;
    cin >> x >> y;
    vp.push_back(make_pair(x, y));
  }
  int count = n;
  for (long long i = 0; i < n; i++) {
    if (!vis[i]) {
      double m, c;
      if ((x0 - vp[i].first) != 0)
        m = (y0 - vp[i].second) / (x0 - vp[i].first);
      else
        m = INT_MAX;
      c = y0 - (m * x0);
      for (long long j = i + 1; j < n; j++) {
        double mj, cj;
        if ((x0 - vp[j].first) != 0)
          mj = (y0 - vp[j].second) / (x0 - vp[j].first);
        else
          mj = INT_MAX;
        cj = y0 - (mj * x0);
        if (m == mj && c == cj) {
          count--;
          vis[j] = true;
        }
      }
    }
  }
  cout << count << endl;
}
