#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-7;
struct point {
  double x, y;
  point() { x = y = 0; }
  point(int X, int Y) { x = X, y = Y; }
} p[110000], o;
inline point V(point s, point e) { return point(e.x - s.x, e.y - s.y); }
inline double crossP(point a, point b) { return a.x * b.y - a.y * b.x; }
inline double dis(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
int main(int argc, const char* argv[]) {
  int n;
  scanf("%d%lf%lf", &n, &o.x, &o.y);
  for (int i = 1; i <= n; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
  p[n + 1] = p[1];
  double R = 0, r = 1e20;
  for (int i = 1; i <= n; i++) {
    R = max(R, dis(p[i], o));
    double l1 = dis(p[i], o), l2 = dis(p[i + 1], o), d = dis(p[i], p[i + 1]);
    double h = abs(crossP(V(o, p[i]), V(o, p[i + 1]))) / d;
    if (l1 * l1 + d * d < l2 * l2 + eps || l2 * l2 + d * d < l1 * l1 + eps)
      r = min(r, min(l1, l2));
    else
      r = min(r, h);
  }
  printf("%.10lf\n", 3.14159265358979 * (R * R - r * r));
  return 0;
}
