/*
TASK: dist
LANG: C
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SQR(a) ((a)*(a))
#define maxN 5005

typedef struct {
        int x,y;
        } point;
        
int n;
point list[maxN],p0;
int stack[maxN],len=2;

int MIN(int a, int b)
{if (a<b) return a;
else return b;}

int cmp(const void *x, const void *y) 
{
    point b=*(point *)x,c=*(point*)y;
    return -(list[0].x*(b.y-c.y) + b.x*(c.y-list[0].y) + c.x*(list[0].y-b.y));
}

int ori(point a, point b, point c)
{return a.x*(b.y-c.y) + b.x*(c.y-a.y) + c.x*(a.y-b.y);}

void input()
{
     int i,bb=0;
     point t;
     scanf("%d",&n);
     scanf("%d%d",&p0.x,&p0.y);
     for (i=0;i<n;++i) scanf("%d%d",&list[i].x,&list[i].y);
     /*printf("!! %d\n",ori(list[3],list[0],list[4]));*/
     for (i=1;i<n;++i) 
         if (list[i].y < list[bb].y) bb = i;
         else if (list[i].y == list[bb].y && list[i].x < list[bb].x) bb = i; 
     t = list[0];
     list[0] = list[bb];
     list[bb] = t;
     qsort(list+1,n-1,sizeof(point),cmp);
     /*for (i=0;i<n;++i) printf("%d %d\n",list[i].x,list[i].y);*/
}

void solve()
{
     int i,j,best;
     double res;
     stack[0] = 0;
     stack[1] = 1;
     for (i=2;i<n;++i) {
         while (ori(list[stack[len-2]],list[stack[len-1]],list[i]) <= 0) --len;
         stack[len++] = i;
         /*for (j=0;j<len;++j) printf("%d %d ** ",list[stack[j]].x,list[stack[j]].y);
         printf("\n");*/
         }
     while (ori(list[stack[len-2]],list[stack[len-1]],list[0]) <= 0) --len;
     /*for (j=0;j<len;++j) printf("%d %d ** ",list[stack[j]].x,list[stack[j]].y);
         printf("\n");*/
     best = SQR(list[0].x - p0.x) + SQR(list[0].y - p0.y);
     for (i=0;i<len;++i)
         best = MIN(best,SQR(list[stack[i]].x - p0.x) + SQR(list[stack[i]].y - p0.y));
     res = sqrt(best);
     printf("%d\n",(int)res);
}
int main()
{
    input();
    solve();
    return 0;
}
