#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
const double EPS = 1e-15;
const double PI = acos(-1.0);
const int MAXN = (int)1e5 + 7;
const int INF = (int)1e9 + 7;
const long long LINF = (long long)2e18 + 7;
const int MOD = (int)1e9 + 7;
const unsigned long long P = 239017;
const unsigned long long MM = (unsigned long long)2147482661;
struct pt {
  long long x, y;
};
struct segm {
  pt p1, p2;
};
int n;
pt p, a[MAXN];
double distpt(double x1, double y1, double x2, double y2) {
  return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
}
double highdist(pt p, segm seg) {
  long long x1 = seg.p1.x, x2 = seg.p2.x, y1 = seg.p1.y, y2 = seg.p2.y;
  return max(distpt(p.x, p.y, x1, y1), distpt(p.x, p.y, x2, y2));
}
double lowdist(pt p, segm seg) {
  long long x1 = seg.p1.x, x2 = seg.p2.x, y1 = seg.p1.y, y2 = seg.p2.y;
  long long dx = (x2 - x1), dy = (y2 - y1);
  long long a = dy, b = -dx, c = y2 * dx - x2 * dy;
  long long na = b, nb = -a, nc = -(na * p.x + nb * p.y);
  double x = -1.0 * (c * nb - nc * b) / (a * nb - na * b);
  double y = -1.0 * (a * nc - na * c) / (a * nb - na * b);
  if (x < min(x1, x2) || x > max(x1, x2)) {
    return min(distpt(p.x, p.y, x1, y1), distpt(p.x, p.y, x2, y2));
  }
  return distpt(p.x, p.y, x, y);
}
int main() {
  cin >> n >> p.x >> p.y;
  for (int i = 0; i < (int)n; i++) {
    scanf("%I64d%I64d", &a[i].x, &a[i].y);
  }
  double maxdist = 0, mindist = LINF;
  for (int i = 0; i < (int)n; i++) {
    int j = (i + 1) % n;
    segm sg = {a[i], a[j]};
    maxdist = max(maxdist, highdist(p, sg));
    mindist = min(mindist, lowdist(p, sg));
  }
  printf("%.10f", PI * (maxdist - mindist));
  return 0;
}
