#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
struct point {
  double x, y;
  point(double argX, double argY) {
    x = argX;
    y = argY;
  }
};
static double dist(point point1, point point2) {
  return sqrtl(powl(point1.x - point2.x, 2) + powl(point1.y - point2.y, 2));
}
int main() {
  int n;
  int number = 0;
  double exactNumber = 0.00001;
  double x, y;
  double k, b, func;
  bool funcState;
  vector<point> myVec;
  cin >> n;
  cin >> x >> y;
  vector<bool> myState(n, false);
  point startPoint(x, y);
  for (int i = 0; i < n; ++i) {
    cin >> x >> y;
    myVec.push_back(point(x, y));
  }
  for (int i = 0; i < n; ++i) {
    if (!myState[i]) {
      myState[i] = true;
      ++number;
      if ((myVec[i].x - startPoint.x) != 0) {
        k = (myVec[i].y - startPoint.y) / (myVec[i].x - startPoint.x);
        b = (myVec[i].x * startPoint.y - startPoint.x * myVec[i].y) /
            (myVec[i].x - startPoint.x);
        funcState = true;
      } else {
        k = 0;
        b = startPoint.x;
        funcState = false;
      }
      for (int j = i + 1; j < n; ++j) {
        if (funcState) {
          double y = k * myVec[j].x + b;
          if (abs(y - myVec[j].y) <= exactNumber) {
            myState[j] = true;
          }
        } else {
          double x = b;
          if (abs(x - myVec[j].x) <= exactNumber) {
            myState[j] = true;
          }
        }
      }
    }
  }
  cout << number << endl;
  return 0;
}
