/*
TASK:dist
LANG:C++
*/
#include<iostream>
#include<algorithm>
#include<cmath>

using namespace std;

int n;
struct to4ka {int x,y;} points[5001];
to4ka P0;

void swap(int i,int j) {
     to4ka a;
     a=points[i];points[i]=points[j];points[j]=a;
}
bool cmp(to4ka p1,to4ka p2) {
     return atan2(p1.y-points[0].y,p1.x-points[0].x)<atan2(p2.y-points[0].y,p2.x-points[0].x);
}
long ccw(to4ka p0,to4ka p1,to4ka p2) {
     int dx1=p1.x-p0.x;
     int dy1=p1.y-p0.y;
     int dx2=p2.x-p0.x;
     int dy2=p2.y-p0.y;
     return dx1*dy2-dy1*dx2;
}
void GrahamScan() {
     int indmin=0;
     for(int i=1;i<n;i++) if(points[i].y<points[indmin].y) indmin=i;
     for(int i=0;i<n;i++) if(points[i].y==points[indmin].y&&points[i].x>points[indmin].x) indmin=i;
     swap(0,indmin);
     sort(points+1,points+n+1,cmp);
     points[n]=points[0];
     int m=2;
     for(int i=3;i<=n;i++) {
             while (ccw(points[m-1],points[m],points[i])<=0) m--;
             m++;swap(i,m);
     }
     n=m;
}
void input() {
     cin>>n;
     cin>>P0.x>>P0.y;
     for(int i=0;i<n;i++) cin>>points[i].x>>points[i].y;
}
void solve() {
     long long dist,newdist;
     dist=(P0.x-points[0].x)*(P0.x-points[0].x)+(P0.y-points[0].y)*(P0.y-points[0].y);
     for(int i=0;i<n+1;i++) {
             newdist=(P0.x-points[0].x)*(P0.x-points[0].x)+(P0.y-points[0].y)*(P0.y-points[0].y);
             if(newdist<dist)dist=newdist;
     }
     cout<<int(sqrt(dist));
}
int main() {
    input();
    GrahamScan();
    solve();
    cout<<endl;
    return 0;
}
