#include <bits/stdc++.h>
using namespace std;
class C_ {};
template <typename T>
C_& operator<<(C_& __m, const T& __s) {
  if (!1) cerr << "\E[91m" << __s << "\E[0m";
  return __m;
}
C_ merr;
struct __s {
  __s() {
    if (1) {
      ios_base::Init i;
      cin.sync_with_stdio(0);
      cin.tie(0);
    }
  }
  ~__s() {
    merr << "Execution time: " << (double)clock() / CLOCKS_PER_SEC << " s.\n";
  }
} __S;
double X[111111], Y[111111];
double x, y;
double dist(double x1, double y1) {
  double dx = (x1 - x), dy = (y1 - y);
  return dx * dx + dy * dy;
}
int main() {
  int n;
  int mxi = 0;
  cin >> n >> x >> y;
  for (int i = 0; i < n; i++) {
    cin >> X[i] >> Y[i];
    if ((X[i] - x) * (X[i] - x) + (Y[i] - y) * (Y[i] - y) >
        (X[mxi] - x) * (X[mxi] - x) + (Y[mxi] - y) * (Y[mxi] - y))
      mxi = i;
  }
  double r2 = 1e100;
  for (int i = 0; i < n; i++) {
    int i2 = (i + 1) % n;
    double x1 = X[i], y1 = Y[i];
    double x2 = X[i2], y2 = Y[i2];
    for (int tt = 0; tt < 111; tt++) {
      double mx1 = x1 + (x2 - x1) / 3.0;
      double my1 = y1 + (y2 - y1) / 3.0;
      double mx2 = x2 - (x2 - x1) / 3.0;
      double my2 = y2 - (y2 - y1) / 3.0;
      if (dist(mx1, my1) < dist(mx2, my2)) {
        x2 = mx2, y2 = my2;
      } else {
        x1 = mx1, y1 = my1;
      }
    }
    r2 = min(r2, sqrt(dist(x1, y1)));
  }
  double r1 = (X[mxi] - x) * (X[mxi] - x) + (Y[mxi] - y) * (Y[mxi] - y);
  r1 = sqrt(r1);
  double pi = acos(-1.0);
  double ans = pi * r1 * r1 - pi * r2 * r2;
  cout << fixed << setprecision(10) << ans << '\n';
  return 0;
}
