#include <bits/stdc++.h>
using namespace std;
const int N = 10e5;
const double PI = atan(1) * 4;
int n;
double px, py, further, closest, edge1, edge2, edge3;
double x[N], y[N];
inline double distance(double xa, double ya, double xb, double yb) {
  return sqrt((xa - xb) * (xa - xb) + (ya - yb) * (ya - yb));
}
inline double near(double xa, double ya, double xb, double yb) {
  edge1 = distance(xa, ya, px, py);
  edge2 = distance(xb, yb, px, py);
  edge3 = distance(xa, ya, xb, yb);
  if (((edge2 * edge2) < ((edge3 * edge3) + (edge1 * edge1))) &&
      ((edge1 * edge1) < ((edge2 * edge2) + (edge3 * edge3)))) {
    return abs(((xa - px) * (yb - py)) - ((ya - py) * (xb - px))) / edge3;
  } else {
    return min(edge1, edge2);
  }
}
int main() {
  scanf("%d %lf %lf", &n, &px, &py);
  further = 0;
  for (int i = 0; i < n; ++i) {
    scanf("%lf %lf", &x[i], &y[i]);
    further = max(further, distance(px, py, x[i], y[i]));
  }
  closest = near(x[n - 1], y[n - 1], x[0], y[0]);
  for (int i = 0; i < n - 1; ++i) {
    closest = min(closest, near(x[i], y[i], x[i + 1], y[i + 1]));
  }
  printf("%.18lf\n", ((further * further) - (closest * closest)) * PI);
  return 0;
}
