/*
TASK:dist
LANG:C++
*/
#include <stdio.h>
#include <algorithm>
#include <vector.h>
#include <math.h>
using namespace std;
struct point{long long x,y;};
long n,i;
point points[5100],p,p1;
vector <point> all;  
inline int ccw(point a, point b, point c)
 {return 0>( (b.y-c.y)*a.x + (c.y-a.y)*b.x + (a.y-b.y)*c.x);}
 int cmp (point a, point b)
 {
  return ((p1.x-a.x)/(double)(p1.y-a.y))>
         ((p1.x-b.x)/(double)(p1.y-b.y));   
 }

int main()
{
scanf("%ld",&n);
scanf("%ld %ld",&p.x,&p.y);
p1.x=2000000;
p1.y=2000000;
int tmp;
for (i=0;i<n;i++) 
    {
    scanf("%ld %ld",&points[i].x,&points[i].y);
    if (points[i].y < p1.y) {p1.x=points[i].x;
                            p1.y=points[i].y;
                            tmp=i;
                            }
    }
points[tmp]=points[0];
points[0]=p1;    
for (i=0;i<n;i++) 
    {
    printf("(%ld,%ld), ",points[i].x,points[i].y);
     }
     printf("\n");
sort(points+1,points+n,cmp);    
for (i=0;i<n;i++) 
    {
    printf("(%ld,%ld), ",points[i].x,points[i].y);
     }
     printf("\n");
for (i=0;i<n;i++)all.push_back(points[i]);
i=2;
while (i!=all.size())
 {if (ccw(all[i-2],all[i-1],all[i])) all.erase(all.begin()+i-1);
                               else i++;                              
 }
long long temp, min;
min=(p.x-all[0].x)*(p.x-all[0].x)+
    (p.y-all[0].y)*(p.y-all[0].y);   
for (i=1;i<all.size();i++) 
    {
    printf("(%ld,%ld), ",all[i].x,all[i].y);
    temp=(p.x-all[i].x)*(p.x-all[i].x)+
         (p.y-all[i].y)*(p.y-all[i].y);
    if (min>temp) min=temp;     
     }
printf("%lld\n",(long long)sqrt((double)min));
return 0;
}
