#include <bits/stdc++.h>
using namespace std;
long double INF = 1e18;
const int N = 1e5 + 1;
long double PI = 2 * acos(0);
long double EPS = 1e-7;
complex<long double> v[N];
long double dot(complex<long double> u, complex<long double> v) {
  return u.real() * v.real() + u.imag() * v.imag();
}
void get_line(complex<long double> p1, complex<long double> p2, long double &a,
              long double &b, long double &c) {
  a = p2.imag() - p1.imag();
  b = p1.real() - p2.real();
  c = p1.imag() * p2.real() - p2.imag() * p1.real();
}
complex<long double> intersect(long double a, long double b, long double c,
                               long double e, long double f, long double g) {
  return complex<long double>(-(b * g - c * f) / (b * e - a * f),
                              -(a * g - c * e) / (a * f - b * e));
}
bool is_inside(complex<long double> p, complex<long double> l1,
               complex<long double> l2) {
  long double a, b, c, e, f, g, m;
  m = (l2.imag() - l1.imag()) / (l2.real() - l1.real());
  m = -1 / m;
  get_line(l1, l2, a, b, c);
  get_line(p,
           p + (l2.imag() == l1.imag()
                    ? complex<long double>(0, 1)
                    : (l2.real() == l1.real() ? complex<long double>(1, 0)
                                              : complex<long double>(1, m))),
           e, f, g);
  complex<long double> p2 = intersect(a, b, c, e, f, g);
  long double d, d1, d2;
  d = sqrt(dot(l2 - l1, l2 - l1));
  d1 = sqrt(dot(p2 - l1, p2 - l1));
  d2 = sqrt(dot(p2 - l2, p2 - l2));
  return abs(d1 + d2 - d) < EPS;
}
long double dist(long double x, long double y, complex<long double> l1,
                 complex<long double> l2) {
  long double a, b, c;
  get_line(l1, l2, a, b, c);
  return (a * x + b * y + c) * (a * x + b * y + c) / (a * a + b * b);
}
int main() {
  ios::sync_with_stdio(0);
  int n;
  long double px, py;
  while (cin >> n >> px >> py) {
    complex<long double> p = complex<long double>(px, py);
    long double r, rr;
    r = INF;
    rr = 0;
    for (int i = 0; i < n; i++) {
      long double x, y;
      cin >> x >> y;
      v[i] = complex<long double>(x, y);
      long double d =
          (x * x - 2 * x * px + px * px + py * py - 2 * y * py + y * y);
      r = min(r, d);
      rr = max(rr, d);
    }
    v[n] = v[0];
    for (int i = 0; i < n; i++) {
      long double d = dist(px, py, v[i], v[i + 1]);
      if (d < r && is_inside(p, v[i], v[i + 1])) r = d;
    }
    cout << setprecision(13) << fixed << PI * (rr - r) << "\n\n";
  }
}
