#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  Point(double X = 0.0, double Y = 0.0) {
    x = X;
    y = Y;
  }
  Point operator+(const Point &A) const { return Point(A.x + x, A.y + y); }
  Point operator-(const Point &A) const { return Point(x - A.x, y - A.y); }
  double operator*(const Point &A) const { return x * A.x + y * A.y; }
  double operator^(const Point &A) const { return x * A.y - y * A.x; }
  bool operator==(const Point &A) const { return (x == A.x && y == A.y); }
  bool operator<(const Point &A) const {
    if (x == A.x) return y < A.y;
    return x < A.x;
  }
};
double norma(const Point &A) { return sqrt(A * A); }
double dist(const Point &A, const Point &B) { return norma(A - B); }
bool f(Point P, Point A, Point B) {
  double a = dist(P, A);
  double b = dist(P, B);
  double c = dist(A, B);
  return (((a * a + c * c) >= b * b) && ((b * b + c * c) >= a * a));
}
double dist_Point_to_Line(Point P, Point P0, Point P1) {
  double a = dist(P, P0);
  double b = dist(P, P1);
  double c = dist(P1, P0);
  double s = (a + b + c) / 2.0;
  return 2.0 * sqrt(s * (s - a) * (s - b) * (s - c)) / c;
}
int main() {
  int n;
  Point P, C;
  double a = 0x3f3f3f3f * 1.0, b = 0.0, x, ans;
  scanf("%d", &n);
  vector<Point> v(n);
  cin >> P.x >> P.y;
  for (int i = 0; i < n; i++) cin >> v[i].x >> v[i].y;
  for (int i = 0; i < n; i++) {
    x = dist(P, v[i]);
    a = min(a, x);
    b = max(b, x);
    if (f(P, v[i], v[(i + 1) % n])) {
      a = min(a, dist_Point_to_Line(P, v[i], v[(i + 1) % n]));
    }
  }
  ans = (b * b - a * a) * acos(-1.0);
  printf("%.8lf\n", ans);
  return 0;
}
