/*
TASK:dist
LANG:C++
*/
#include <iostream>
#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()
{
cin>>n;
cin>>p.x>>p.y;    
p1.x=2000000;
p1.y=2000000;
int tmp;
for (i=0;i<n;i++) 
    {              
    cin>>points[i].x>>points[i].y;
//    cout<<points[i].x<<" "<<points[i].y<<endl;
    if (points[i].y < p1.y) {p1.x=points[i].x;
                            p1.y=points[i].y;
                            tmp=i;
                            }
    if (points[i].y == p1.y)
     if (points[i].x < p1.x)
                            {p1.x=points[i].x;
                            p1.y=points[i].y;
                            tmp=i;
                            }
                            
    }
  
for (i=0;i<n;i++) cout<<points[i].x<<" "<<points[i].y<<"  ";
cout<<endl;
points[tmp]=points[0];
points[0]=p1;  
sort(points+1,points+n,cmp);    
for (i=0;i<n;i++) cout<<points[i].x<<" "<<points[i].y<<"  ";
cout<<endl;
for (i=0;i<n;i++)all.push_back(points[i]);
all.push_back(points[0]);
i=2;
while (i!=all.size())
 {cout<<ccw(all[i-2],all[i-1],all[i])<<" "<<all[i-2].x<<","<<all[i-2].y
   <<" "<<all[i-1].x<<","<<all[i-1].y<<" "<<all[i].x<<","<<all[i].y<<endl;
      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);
cout<<"("<<points[0].x<<","<<points[0].y<<") ";  
for (i=1;i<all.size();i++) 
    {
    cout<<"("<<points[i].x<<","<<points[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;     
     }
cout<<endl;
cout<<(long long)sqrt((double)min)<<endl;
return 0;
}
