/*
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;  
int flag=-1;
for (i=1;i<n;i++) if (points[i].y==p1.y) flag=i;
//cout<<flag;
if (flag==-1)sort(points+1,points+n,cmp);   
      else {point temp;
            temp=points[flag];
            points[flag]=points[1];
            points[1]=temp;
            sort(points+2,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]);
//for (i=0;i<all.size();i++) cout<<all[i].x<<" "<<all[i].y<<"  ";
//cout<<endl;
flag=1;
while (flag==1)
{
i=2;
flag=0;
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<<" "<<all.size()<<endl;
      if (ccw(all[i-2],all[i-1],all[i])==1) {all.erase(all.begin()+i-1);flag=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<<"("<<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;     
     }
//cout<<endl;
cout<<(long long)sqrt((double)min)<<endl;
return 0;
}
