#include <bits/stdc++.h>
using namespace std;
long double linePoint(complex<long double> c, complex<long double> a,
                      complex<long double> b) {
  long double dist = (conj(b - a) * (c - a)).imag() / abs(a - b);
  long long int dot1 = (conj(b - a) * (c - b)).real();
  if (dot1 > 0) return abs(b - c);
  long long int dot2 = (conj(a - b) * (c - a)).real();
  if (dot2 > 0) return abs(a - c);
  return abs(dist);
}
int main(int argc, char const *argv[]) {
  long double maxdis = -1e12, dis, mindis = 1e12;
  int n, a, b;
  cin >> n;
  complex<long double> p, pts[100100];
  cin >> a >> b;
  p = complex<long double>(a, b);
  for (int i = 0; i < n; ++i) {
    cin >> a >> b;
    pts[i] = complex<long double>(a, b);
    dis = abs(pts[i] - p);
    if (dis > maxdis) maxdis = dis;
  }
  for (int i = 0; i < n - 1; ++i) {
    dis = linePoint(p, pts[i], pts[i + 1]);
    if (dis < mindis) {
      mindis = dis;
    }
  }
  dis = linePoint(p, pts[0], pts[n - 1]);
  if (dis < mindis) {
    mindis = dis;
  }
  dis = 3.141592653589793238462643383279502884 *
        ((maxdis * maxdis) - (mindis * mindis));
  cout << fixed << setprecision(12) << dis << endl;
  return 0;
}
