#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  Point() {}
  Point(const double &x, const double &y) : x(x), y(y) {}
  double len() { return x * x + y * y; }
} P, p[100005];
Point operator-(const Point &a, const Point &b) {
  return Point(a.x - b.x, a.y - b.y);
}
double get_d(Point a, Point b) {
  double x, y, z, d1, d2, p, s;
  x = (P - a).len();
  y = (P - b).len();
  z = (a - b).len();
  d1 = x > y ? y : x;
  p = (sqrt(x) + sqrt(y) + sqrt(z)) / 2;
  s = sqrt(p * (p - sqrt(x)) * (p - sqrt(y)) * (p - sqrt(z)));
  d2 = (2 * s / sqrt(z)) * (2 * s / sqrt(z));
  if (x + z < y || y + z < x) d2 = d1;
  return d1 > d2 ? d2 : d1;
}
int main() {
  int n, i;
  double tmax, tmin = 0, k;
  cin >> n >> P.x >> P.y;
  for (i = 0; i < n; i++) cin >> p[i].x >> p[i].y;
  p[n] = p[0];
  tmax = (P - p[0]).len();
  for (i = 1; i < n; i++)
    if ((P - p[i]).len() > tmax) tmax = (P - p[i]).len();
  tmin = tmax;
  for (i = 0; i < n; i++) {
    k = get_d(p[i], p[i + 1]);
    if (k < tmin) tmin = k;
  }
  printf("%.18f\n", (tmax - tmin) * acos(-1.0));
}
