#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
} rec[100005];
double cross(point p, point p1) {
  return sqrt((p1.x - p.x) * (p1.x - p.x) + (p1.y - p.y) * (p1.y - p.y));
}
int main() {
  point firP;
  int t;
  while (scanf("%d%lf%lf", &t, &firP.x, &firP.y) != EOF) {
    for (int i = 0; i < t; i++) scanf("%lf%lf", &rec[i].x, &rec[i].y);
    rec[t] = rec[0];
    double maxL = -1, minL = 99999999;
    for (int i = 0; i < t; i++) {
      double a = cross(firP, rec[i]);
      double b = cross(firP, rec[i + 1]);
      double c = cross(rec[i], rec[i + 1]);
      maxL = max(maxL, max(a, b));
      if ((c * c + b * b) <= a * a)
        minL = min(minL, b);
      else if ((a * a + c * c) <= b * b)
        minL = min(minL, a);
      else {
        double p = (a + b + c) / 2.0;
        double s = sqrt(p * (p - a) * (p - b) * (p - c));
        minL = min(minL, s * 2.0 / c);
      }
    }
    printf("%lf\n", acos(-1.0) * (maxL * maxL - minL * minL));
  }
  return 0;
}
