/*
TASK: dist
LANG: C++
*/
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;

struct point
{
       int x, y;
       point(int a, int b) {x = a; y = b;}
       point(){}
};
vector<point> P;
int lowesti;
bool cmp(point a, point b)
{
     double angle1 = atan2(a.y - P[lowesti].y, a.x - P[lowesti].x);
     double angle2 = atan2(b.y - P[lowesti].y, b.x - P[lowesti].x);
     return angle1 < angle2;
}

long long cross(point p1, point p2)
{
     return (p1.x - P[lowesti].x)*(p2.y - P[lowesti].y) -
            (p2.x - P[lowesti].x)*(p1.y - P[lowesti].y);
} 

point T;
int dist(point p)
{
    return (int)sqrt((p.x - T.x)*(p.x - T.x) + 
                     (p.y - T.y)*(p.y - T.y));
}

int main()
{
    int n;
    cin >> n;
    cin >> T.x >> T.y;
    for (int i = 0; i < n; i++)
    {
        int x, y;
        cin >> x >> y;
        P.push_back(point(x, y));
    }
    
    int lowesty = 1000001;    
    for (int i = 0; i < n; i++)
     if (P[i].y < lowesty)
     {
          lowesti = i;
          lowesty = P[i].y;
     }
    
    point target = P[0];
    sort(P.begin(), P.begin() + n, cmp);
    
    vector<point> v;
    v.push_back(P[0]);
    v.push_back(P[1]);
    
    for (int i = 2; i < n; i++)
    {
        point c = P[i];
        if (cross(v.back(), c) > 0) v.push_back(c);
        else
        {
            v.pop_back();
            while (v.size() > 1)
            {
                 point p = v.back();
                 if (cross(p, c) > 0) {v.push_back(c); break;}
                 v.pop_back();
            }
        }
    }
    
    int mindist = 1000000000;
    for (int i = 0; i < v.size(); i++)
     mindist = min(mindist, dist(v[i]));
    cout << mindist << endl; 
    return 0;
}     
    
    
    
