#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
struct L : public vector<complex<double> > {
  L(const complex<double> &a, const complex<double> &b) {
    push_back(a);
    push_back(b);
  }
};
double cross(const complex<double> &a, const complex<double> &b) {
  return imag(conj(a) * b);
}
double dot(const complex<double> &a, const complex<double> &b) {
  return real(conj(a) * b);
}
int ccw(complex<double> a, complex<double> b, complex<double> c) {
  b -= a;
  c -= a;
  if (cross(b, c) > 0) return +1;
  if (cross(b, c) < 0) return -1;
  if (dot(b, c) < 0) return +2;
  if (norm(b) < norm(c)) return -2;
  return 0;
}
bool intersectSP(const L &s, const complex<double> &p) {
  return abs(s[0] - p) + abs(s[1] - p) - abs(s[1] - s[0]) < EPS;
}
bool intersectSS(const L &s, const L &t) {
  return ccw(s[0], s[1], t[0]) * ccw(s[0], s[1], t[1]) <= 0 &&
         ccw(t[0], t[1], s[0]) * ccw(t[0], t[1], s[1]) <= 0;
}
complex<double> projection(const L &l, const complex<double> &p) {
  double t = dot(p - l[0], l[0] - l[1]) / norm(l[0] - l[1]);
  return l[0] + t * (l[0] - l[1]);
}
double distanceSP(const L &s, const complex<double> &p) {
  const complex<double> r = projection(s, p);
  if (intersectSP(s, r)) return abs(r - p);
  return min(abs(s[0] - p), abs(s[1] - p));
}
const int MAXN = 1 << 18;
int N;
double x[MAXN];
double y[MAXN];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N;
  double px, py;
  cin >> px >> py;
  complex<double> pp(px, py);
  for (int i = 0; i < N; ++i) cin >> x[i] >> y[i];
  double lo = 1e30;
  double hi = -1;
  for (int i = 0; i < N; ++i) {
    double nx = x[(i + 1) % N];
    double ny = y[(i + 1) % N];
    double d =
        distanceSP(L(complex<double>(x[i], y[i]), complex<double>(nx, ny)), pp);
    lo = min(lo, d);
    hi = max(hi, sqrt((x[i] - px) * (x[i] - px) + (y[i] - py) * (y[i] - py)));
  }
  cout.precision(20);
  cout << acos(-1) * (hi * hi - lo * lo) << ('\n');
  return 0;
}
