#include <bits/stdc++.h>
using namespace std;
struct pnt {
  double x, y;
  pnt(double x = 0, double y = 0) : x(x), y(y) {}
  pnt operator-(pnt a) { return pnt(x - a.x, y - a.y); }
  pnt operator+(pnt a) { return pnt(x + a.x, y + a.y); }
  pnt operator*(double a) { return pnt(x * a, y * a); }
  pnt operator/(double a) { return pnt(x / a, y / a); }
  double operator^(pnt a) { return x * a.y - y * a.x; }
  double operator&(pnt a) { return x * a.x + y * a.y; }
  void input() { x = y = 0, scanf("%lf %lf", &x, &y); }
  void print() { printf("%lf %lf\n", x, y); }
} P, q[2000000];
double dist(pnt a) { return sqrt(a & a); }
double dist_line(pnt a, pnt b, pnt c) {
  return fabs(a - b ^ c - b) / dist(b - c);
}
double dist_seg(pnt a, pnt b, pnt c) {
  if ((a - b & c - b) < 1e-6) return dist(a - b);
  if ((a - c & b - c) < 1e-6) return dist(a - c);
  return dist_line(a, b, c);
}
int main() {
  int n;
  scanf("%d", &n);
  P.input();
  for (int i = 0; i < n; i++) q[i].input();
  double mi = 1e18, mx = -1e18;
  for (int i = 0; i < n; i++) {
    mi = min(mi, dist_seg(P, q[i], q[(i + 1) % n]));
    mx = max(mx, dist(P - q[i]));
  }
  printf("%.20lf\n", (mx * mx - mi * mi) * acos(-1));
}
