#include <bits/stdc++.h>
using namespace std;
int N, PX, PY, prevX, prevY, X, Y, firstX, firstY;
double valMin = 1e20, valMax = -1;
double dist(double x1, double y1, double x2, double y2) {
  return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
}
double dist2(double x1, double y1, double x2, double y2) {
  double m, A, B, C;
  m = (double)(y1 - y2) / (x1 - x2);
  if (abs(m) == INFINITY) {
    B = 0;
    A = 1;
    C = -x1;
  } else {
    B = 1, A = -m, C = -y1 + m * x1;
  }
  double interX = (B * (B * PX - A * PY) - A * C) / (A * A + B * B);
  double interY = (A * (-B * PX + A * PY) - B * C) / (A * A + B * B);
  if (interX - max(x1, x2) <= 1e-9 && interX - min(x1, x2) >= -1e-9 &&
      interY - max(y1, y2) <= 1e-9 && interY - min(y1, y2) >= -1e-9) {
    return pow(abs(A * PX + B * PY + C) / sqrt(A * A + B * B), 2);
  }
  return 1e20;
}
int main() {
  scanf("%d%d%d", &N, &PX, &PY);
  scanf("%d%d", &firstX, &firstY);
  prevX = firstX, prevY = firstY;
  valMin = dist(prevX, prevY, PX, PY);
  valMax = valMin;
  N--;
  while (N--) {
    scanf("%d%d", &X, &Y);
    valMax = max(valMax, dist(X, Y, PX, PY));
    valMin = min(valMin, dist(X, Y, PX, PY));
    valMin = min(valMin, dist2(X, Y, prevX, prevY));
    prevX = X, prevY = Y;
  }
  valMin = min(valMin, dist2(firstX, firstY, X, Y));
  printf("%.8lf\n", 3.141592653589793238446264338327950288419716939937510582 *
                        (valMax - valMin));
  return 0;
}
