#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int N = 1e5 + 5;
long double dist(complex<long double> a, complex<long double> b) {
  return hypot(((b) - (a)).real(), ((b) - (a)).imag());
}
long double solve(complex<long double> a, complex<long double> b,
                  complex<long double> c) {
  complex<long double> tmp_a = a, tmp_c = c;
  b -= a, c -= a, a = 0;
  long double ang = atan2((b).imag(), (b).real());
  b = ((b) - (a)) * exp(complex<long double>(0, (-ang))) + (a);
  c = ((c) - (a)) * exp(complex<long double>(0, (-ang))) + (a);
  complex<long double> ret(c.real(), 0);
  if (c.real() < a.real()) ret = complex<long double>(a.real(), 0);
  if (c.real() > b.real()) ret = complex<long double>(b.real(), 0);
  ret = ((ret) - (a)) * exp(complex<long double>(0, (ang))) + (a) + tmp_a;
  return dist(tmp_c, ret);
}
vector<complex<long double> > v;
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, x, y;
  cin >> n >> x >> y;
  complex<long double> p(x, y);
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    v.emplace_back(complex<long double>(x, y));
  }
  long double mx = 0, mn = 1e9;
  for (int i = 0; i < n; i++) {
    mx = max(mx, dist(v[i], p));
    mn = min(mn, solve(v[i], v[(i + 1) % n], p));
  }
  cout << fixed << setprecision(6) << acos(-1) * (mx * mx - mn * mn);
  return 0;
}
