#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
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; }
} p[100010];
int n;
double dist(pnt a) { return sqrt(a & a); }
bool inside(pnt a, pnt b, pnt c) {
  double A = a - b & a - c;
  double B = a - b ^ a - c;
  if (fabs(B) > 1e-6) return 0;
  return A <= 0;
}
int insideP(pnt q) {
  int cross = 0;
  for (int i = 0; i < n; i++) {
    int j = (i + 1) % n;
    if (inside(q, p[i], p[j])) return 2;
    if (p[j].y > q.y && p[i].y <= q.y || p[i].y > q.y && p[j].y <= q.y) {
      double x = (p[j] - q ^ p[i] - q) * (p[i].y - p[j].y);
      if (x > 1e-6) cross++;
    }
  }
  return cross % 2;
}
inline 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);
}
double DIST(pnt a) { return (a & a); }
int main() {
  double x, y;
  scanf("%d %lf %lf", &n, &x, &y);
  for (int i = 0; i < n; i++) {
    scanf("%lf %lf", &p[i].x, &p[i].y);
  }
  pnt P = pnt(x, y);
  double mx = 0, mn = 1e20;
  for (int i = 0; i < n; i++) {
    double tmp = DIST(P - p[i]);
    if (tmp > mx) mx = tmp;
  }
  if (insideP(P))
    printf("%.12lf\n", mx * pi);
  else {
    for (int i = 0; i < n; i++) {
      double tmp = dist_seg(P, p[i], p[(i + 1) % n]);
      if (tmp < mn) mn = tmp;
    }
    printf("%.12lf\n", (mx - mn * mn) * pi);
  }
}
