#include <bits/stdc++.h>
const double EPS = 1e-10;
const long long int MOD = 1000000007ll;
const long long int mod1 = 1000000009ll;
const long long int mod2 = 1100000009ll;
int INF = 2147483645;
long long int INFINF = 9223372036854775807;
int debug = 0;
using namespace std;
long long int bit_count(long long int _x) {
  long long int _ret = 0;
  while (_x) {
    if (_x % 2 == 1) _ret++;
    _x /= 2;
  }
  return _ret;
}
long long int bit(long long int _mask, long long int _i) {
  return (_mask & (1 << _i)) == 0 ? 0 : 1;
}
long long int powermod(long long int _a, long long int _b, long long int _m) {
  long long int _r = 1;
  while (_b) {
    if (_b % 2 == 1) _r = (_r * _a) % _m;
    _b /= 2;
    _a = (_a * _a) % _m;
  }
  return _r;
}
long long int add(long long int a, long long int b) {
  long long int x = a + b;
  while (x >= MOD) x -= MOD;
  return x;
}
long long int sub(long long int a, long long int b) {
  long long int x = a - b;
  while (x < 0) x += MOD;
  return x;
}
long long int mul(long long int a, long long int b) {
  long long int x = a * b;
  x %= MOD;
  return x;
}
struct PT {
  long double x, y;
  PT() {}
  PT(long double x, long double y) : x(x), y(y) {}
  PT(const PT &p) : x(p.x), y(p.y) {}
  PT operator+(const PT &p) const { return PT(x + p.x, y + p.y); }
  PT operator-(const PT &p) const { return PT(x - p.x, y - p.y); }
  PT operator*(long double c) const { return PT(x * c, y * c); }
  PT operator/(long double c) const { return PT(x / c, y / c); }
};
long double dot(PT p, PT q) { return p.x * q.x + p.y * q.y; }
long double dist2(PT p, PT q) { return dot(p - q, p - q); }
long double cross(PT p, PT q) { return p.x * q.y - p.y * q.x; }
PT RotateCCW90(PT p) { return PT(-p.y, p.x); }
PT RotateCW90(PT p) { return PT(p.y, -p.x); }
PT RotateCCW(PT p, long double t) {
  return PT(p.x * cos(t) - p.y * sin(t), p.x * sin(t) + p.y * cos(t));
}
PT ProjectPointLine(PT a, PT b, PT c) {
  return a + (b - a) * dot(c - a, b - a) / dot(b - a, b - a);
}
PT ProjectPointSegment(PT a, PT b, PT c) {
  long double r = dot(b - a, b - a);
  if (fabs(r) < EPS) return a;
  r = dot(c - a, b - a) / r;
  if (r < 0) return a;
  if (r > 1) return b;
  return a + (b - a) * r;
}
long double DistancePointSegment(PT a, PT b, PT c) {
  return sqrt(dist2(c, ProjectPointSegment(a, b, c)));
}
long long int n, px, py;
long long int pointx[100010], pointy[100010];
const long double PI = acos(-1.0);
int main() {
  srand(time(NULL));
  scanf("%lld", &n);
  ;
  scanf("%lld", &px);
  ;
  scanf("%lld", &py);
  ;
  long double ans = 0.0;
  long double maxDist = -1e18, minDist = 1e18;
  cout << fixed << setprecision(20);
  for (int i = 0; i < n; i++) {
    long long int x, y;
    scanf("%lld", &x);
    ;
    scanf("%lld", &y);
    ;
    pointx[i] = x;
    pointy[i] = y;
    long double ddd = dist2(PT((long double)px, (long double)py),
                            PT((long double)x, (long double)y));
    ddd = sqrt((long double)ddd);
    if (ddd > maxDist) maxDist = ddd;
    if (ddd < minDist) minDist = ddd;
  }
  for (int i = 0; i < n; i++) {
    long long int x1 = pointx[i];
    long long int y1 = pointy[i];
    long long int x2 = pointx[(i + 1) % n];
    long long int y2 = pointy[(i + 1) % n];
    long double ddd =
        DistancePointSegment(PT((long double)x1, (long double)y1),
                             PT((long double)x2, (long double)y2),
                             PT((long double)px, (long double)py));
    if (ddd > maxDist) maxDist = ddd;
    if (ddd < minDist) minDist = ddd;
  }
  ans = PI * (maxDist * maxDist - minDist * minDist);
  cout << ans;
  return 0;
}
