/*
TASK: dist
LANG: C++
*/
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
# define min(a,b) (((a) < (b))?(a):(b))
# define area(x1,y1,x2,y2,x3,y3) (x1*(y2-y3))+(x2*(y3-y1))+(x3*(y1-y2))
# define MAXP (1<<13)

int p0x,p0y,n;
int minx,miny;
int hull[MAXP];
int top;

struct points {
    int x,y;          
} data[MAXP];

int cmp(const void *e1,const void *e2) {
    return -(area(minx,miny,((points*)e1)->x,((points*)e1)->y,((points*)e2)->x,((points*)e2)->y));
}

void read() {
    minx = 1000000;
    miny = 1000000;
    scanf("%d", &n);
    scanf("%d %d ", &p0x,&p0y);
    for(int i = 0; i < n; i++) {
        scanf("%d %d", &data[i].x,&data[i].y);              
        if(miny > data[i].y) {
            minx = data[i].x;
            miny = data[i].y;        
        }          
    }
    //printf("%d %d\n", minx,miny);
    qsort(data,n,sizeof(points),cmp);            
    /*for(int i = 0; i < n; i++) {
        printf("%d %d\n", data[i].x,data[i].y);            
    }*/
}

void makehull() {
    hull[0] = 0;
    hull[1] = 1;
    top = 2;
    for(int i = 2; i < n; i++) {
         while(area(data[top-2].x,data[top-2].y,data[top-1].x,data[top-1].y,data[i].x,data[i].y) < 0) {
             top--;                                                                                                
         }
         hull[top++] = i;           
    }      
    double ans=10000000.0;
    for(int i = 0; i < top; i++) {
        //printf("%d %d\n", data[hull[i]].x,data[hull[i]].y);                
        ans = min(ans,(sqrt( (p0x-data[hull[i]].x)*(p0x-data[hull[i]].x)+(p0y-data[hull[i]].y)*(p0y-data[hull[i]].y))));
    }
    int p;
    ans *= 10.0;
    p = (int)ans;
    p/=10;
    printf("%d\n", p);
}

int main() {
    read();
    makehull();   
    return 0;
}
