#include <cstdio>
#include <cmath>
#include <algorithm>
#include <set>
#define MAX 20002
#define INF 0xfffff
#define EPS 1e-8
using namespace std;

struct point{ double x,y; }a,b,p[MAX],seg[MAX];
int n,neg[MAX],poz[MAX],n1,n2;

set<double>s;
set<double>::iterator it;

double sqr(const double x){ return x*x; }

void move(point &p,const double cos,const double sin){
    point old=p;
    p.x=old.x*cos-old.y*sin;
    p.y=old.x*sin+old.y*cos;
}

void points(){
    double dx,dy,cos,sin,ip;
    dx=-a.x;
    dy=-a.y;
    a.x=0.0; a.y=0.0; b.x+=dx; b.y+=dy;
    for(int i=1;i<=n;i++)p[i].x+=dx,p[i].y+=dy;
    //printf("%lf %lf %lf %lf\n",a.x,a.y,b.x,b.y);
    ip=sqrt(sqr(b.x-a.x)+sqr(b.y-a.y));
    if(b.y<EPS){
    cos=abs(b.x-a.x)/ip;
    sin=abs(b.y-a.y)/ip;
    move(b,cos,sin);
    for(int i=1;i<=n;i++)move(p[i],cos,sin); } else {
    cos=abs(b.y-a.y)/ip;
    sin=abs(b.x-a.x)/ip;
    move(b,cos,sin); swap(b.x,b.y); b.y*=-1.0;
    for(int i=1;i<=n;i++)move(p[i],cos,sin),swap(p[i].x,p[i].y),p[i].y*=-1.0; }
}

double val[MAX];
int nr[MAX],k;
void unghiuri(){
    for(int i=1;i<=n;i++){
        if(p[i].x==0)seg[i].x=INF; else seg[i].x=p[i].y/p[i].x;
        if(abs(p[i].x-b.x)<EPS)seg[i].y=INF; else seg[i].y=(p[i].y-b.y)/(p[i].x-b.x);
    };
    for(int i=1;i<=n;i++){
        s.insert(seg[i].x);
        s.insert(seg[i].y); }
    it=s.begin();
    while(it!=s.end()){ val[++k]=*it; it++; }
}

void put(double a,double b){
    //printf("%lf %lf\n",a,b);
    for(int i=1;i<=k;i++)
    if(a-val[i]<EPS&&val[i]-b<EPS)nr[i]++;
}

void cauta(){
    double a,b;
    for(int i=1;i<=n;i++){
        a=seg[i].x;
        b=seg[i].y;
        if(a-b>EPS)swap(a,b);
        if(a+EPS<0&&abs(b-INF)<EPS)put((double)-INF,a),nr[k]++; else
        if(a-EPS>0&&abs(b-INF)<EPS)put(a,(double)INF); else
        if(a+EPS>0&&b+EPS>0)put(a,b); else
        if(a-EPS<0&&b-EPS<0)put(a,b); else {
            put((double)-INF,a);
            put(b,(double)INF); }
    }
}

int main(){
    freopen("puncte.in","r",stdin);
    freopen("puncte.out","w",stdout);
        scanf("%d",&n);
        scanf("%lf %lf %lf %lf",&a.x,&a.y,&b.x,&b.y);
        if(a.x-b.x>EPS)swap(a,b);

        for(int i=1;i<=n;i++)scanf("%lf %lf",&p[i].x,&p[i].y);
    points();
    unghiuri();
    cauta();
   // for(int i=1;i<=k;i++)printf("%d ",nr[i]);
int pos=1;
   for(int i=1;i<=k;i++)if(nr[i]>nr[pos])pos=i;
   printf("%d\n",nr[pos]);
printf("\n");
   // printf("%lf %lf %lf %lf\n",a.x,a.y,b.x,b.y);
   // for(int i=1;i<=n;i++)printf("%lf %lf\n",p[i].x,p[i].y);
  // for(int i=1;i<=n;i++)printf("%lf %lf\n",seg[i].x,seg[i].y);

}