#include <bits/stdc++.h>
using namespace std;
long double pointLineDist(const complex<long double>& a,
                          const complex<long double>& b,
                          const complex<long double>& p) {
  return fabs(((conj(((b) - (a))) * (((p) - (a)))).imag()) /
              ((long double)hypot((((b) - (a))).imag(), (((b) - (a))).real())));
}
long double pointSegmentDist(const complex<long double>& a,
                             const complex<long double>& b,
                             const complex<long double>& p) {
  if (((conj(((b) - (a))) * (((p) - (a)))).real()) < 1e-9)
    return ((long double)hypot((((p) - (a))).imag(), (((p) - (a))).real()));
  if (((conj(((a) - (b))) * (((p) - (b)))).real()) < 1e-9)
    return ((long double)hypot((((p) - (b))).imag(), (((p) - (b))).real()));
  return pointLineDist(a, b, p);
}
int main() {
  vector<complex<long double> > v;
  int n, k, l1, f, s;
  cin >> n >> k >> l1;
  complex<long double> b = complex<long double>(k, l1);
  long double mx = -1, mn = 10000000;
  for (int i = 0; i < n; i++) {
    cin >> f >> s;
    complex<long double> a = complex<long double>(f, s);
    mx = max(mx, ((long double)hypot((a - b).imag(), (a - b).real())));
    v.push_back(complex<long double>(f, s));
  }
  for (int i = 0; i < n; i++) {
    mn = min(mn, pointSegmentDist(v[i], v[(i + 1) % n], b));
  }
  cout << setprecision(15) << (long double)atan(1) * 4 * (mx * mx - mn * mn);
  return 0;
}
