#include <bits/stdc++.h>
using namespace std;
template <typename T>
T sqr(T x) {
  return x * x;
}
double get_d(double a11, double a12, double a21, double a22) {
  return a11 * a22 - a21 * a12;
}
double eps = 1e-10;
void intersect(long long x1, long long fdsafdsa, long long x2, long long y2,
               double &x, double &y) {
  double a1 = fdsafdsa - y2;
  double b1 = x2 - x1;
  double c1 = -a1 * x1 - b1 * fdsafdsa;
  double a2 = b1;
  double b2 = -a1;
  double c2 = 0;
  double dx = get_d(-c1, b1, -c2, b2), dy = get_d(a1, -c1, a2, -c2),
         d = get_d(a1, b1, a2, b2);
  if (d == 0) return;
  x = dx / d, y = dy / d;
  if (x1 > x2) swap(x1, x2), swap(fdsafdsa, y2);
  if (x >= x1 - eps && x <= x2 + eps && y >= min(fdsafdsa, y2) - eps &&
      y <= max(fdsafdsa, y2) + eps)
    return;
  x = x1, y = fdsafdsa;
}
int main() {
  int n, px, py;
  cin >> n >> px >> py;
  vector<long long> x(n), y(n);
  for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
  double mini, maxi;
  for (int i = 0; i < n; i++) {
    x[i] -= px;
    y[i] -= py;
    if (i == 0)
      mini = maxi = x[i] * x[i] + y[i] * y[i];
    else {
      maxi = max(maxi, (double)x[i] * x[i] + y[i] * y[i]);
      mini = min(mini, (double)x[i] * x[i] + y[i] * y[i]);
    }
  }
  for (int i = 0; i < n; i++) {
    int nxt = (i + 1) % n;
    double xx = 0, yy = 0;
    intersect(x[i], y[i], x[nxt], y[nxt], xx, yy);
    mini = min(mini, xx * xx + yy * yy);
  }
  cout.precision(10);
  cout << fixed << (maxi - mini) * acos(-1) << "\n";
  return 0;
}
