#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 10;
const double pi = acos(-1);
struct point {
  double x, y;
};
int n;
double minR, maxR;
point p, v[N];
double dist(point A, point B) {
  return sqrt(((A.x - B.x) * (A.x - B.x)) + ((A.y - B.y) * (A.y - B.y)));
}
double dist_to_seg(point A, point B, point C) {
  if (B.x == C.x) {
    if (A.y >= min(B.y, C.y) && A.y <= max(B.y, C.y))
      return (((A.x - B.x) > 0) ? (A.x - B.x) : (-(A.x - B.x)));
    return min(dist(A, B), dist(A, C));
  }
  if (B.y == C.y) {
    if (A.x >= min(B.x, C.x) && A.x <= max(B.x, C.x))
      return (((A.y - B.y) > 0) ? (A.y - B.y) : (-(A.y - B.y)));
    return min(dist(A, B), dist(A, C));
  }
  double k = (B.y - C.y) / (B.x - C.x);
  double crx = (k * B.x - B.y + A.x / k + A.y) / (k + 1 / k);
  if (crx >= min(B.x, C.x) && crx <= max(B.x, C.x)) {
    double cry = k * (crx - B.x) + B.y;
    return (((k * A.x - A.y + B.y - k * B.x) > 0)
                ? (k * A.x - A.y + B.y - k * B.x)
                : (-(k * A.x - A.y + B.y - k * B.x))) /
           sqrt(k * k + 1);
  }
  return min(dist(A, B), dist(A, C));
}
int main() {
  scanf("%d%lf%lf", &n, &p.x, &p.y);
  for (int i = 1; i <= (n); i++) {
    scanf("%lf%lf", &v[i].x, &v[i].y);
    maxR = max(maxR, ((dist(p, v[i])) * (dist(p, v[i]))));
  }
  minR = ((dist_to_seg(p, v[1], v[n])) * (dist_to_seg(p, v[1], v[n])));
  for (int i = 1; i <= (n - 1); i++)
    minR = min(minR, ((dist_to_seg(p, v[i], v[i + 1])) *
                      (dist_to_seg(p, v[i], v[i + 1]))));
  printf("%.11lf\n", pi * (maxR - minR));
  return 0;
}
