#define _USE_MATH_DEFINES
#include<iostream>
#include<complex>
#include<cmath>
#include<climits>
#include<iomanip>
using namespace std ;
typedef long double T ;
typedef complex<T> pt;
#define f(i,s,n) for(int i=s;i<n;i++)
// typedef long double T ;
#define x real()
#define y imag()
T dot(pt v,pt w) {return v.x*w.x + v.y*w.y;}
T cross(pt v,pt w) {return v.x*w.y - v.y*w.x;}
struct line
{
    pt v;
    T c ;
};
// T dot(pt v,pt w){return (conj(v)*w).x;}
// T cross(pt v,pt w){return (conj(v)*w).y;}
pt perp(pt p) {return {-p.y, p.x};}
line perp_line(line l,pt P)
{
    line l2 ;
    l2.v = perp(l.v) ;
    l2.c = cross(l2.v,P) ;
    return l2 ;
}
pt getv(pt a,pt b)
{
    return {b.x-a.x,b.y-a.y} ;
}
bool intersect(line l1,line l2,pt& out)
{
    T d = cross(l1.v, l2.v);
    if (d == 0) return false;
    out = (l2.v*l1.c - l1.v*l2.c) / d; // requires floating-point coordinates
    // T xx = (l2.v.x*l1.c-l1.v.x*l2.c)/d ;
    // T yy = (l2.v.y*l1.c-l1.v.y*l2.c)/d ;
    // out = {xx,yy} ; 
    return true;
}
pt poi(line l1,pt P)
{
    line l2 = perp_line(l1,P) ;
    pt out ;
    intersect(l1,l2,out) ;
    return out ;
}
T dist(pt A,pt B)
{
    return (A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y) ;
}
bool inseg(pt a,pt b,pt p)
{
    return p.x<=max(a.x,b.x) && p.x>=min(a.x,b.x) && p.y<=max(a.y,b.y) && p.y>=min(a.y,b.y); 
}
const int MAXN = 1e5+5 ;
pt pts[MAXN] ;
int main()
{
    ios::sync_with_stdio(0) ;
    cin.tie(0);cout.tie(0) ;
    int n;T px,py;
    pt P ;cin>>n>>px>>py ;
    P = {px,py} ;
    T maxd = 0,mind = LONG_MAX ;
    f(i,0,n)
    {
        T a,b ;
        cin>>a>>b ;
        pts[i] = {a,b} ;
        maxd = max(maxd,dist(P,pts[i])) ;
        mind = min(mind,dist(P,pts[i])) ;
    }
    f(i,0,n)
    { 
        int j = (i+1)%n ;
        line l ;
        l.v = getv(pts[i],pts[j]) ;
        l.c = cross(l.v,pts[i]) ;
        pt poii = poi(l,P) ;
        if(inseg(pts[i],pts[j],poii))
        {
            mind = min(mind,dist(poii,P)) ;
        }
    }
    cout<<setprecision(50)<<M_PI*(maxd-mind)<<"\n" ;

}