#include <bits/stdc++.h>
using namespace std;
vector<pair<double, double> > v;
double dist(double x0, double y0, double x, double y) {
  return ((x0 - x) * (x0 - x)) + ((y0 - y) * (y0 - y));
}
int main() {
  int n, i, j;
  double x0, y0, x, y, mn, mx, t1, t2, t3;
  scanf("%d", &n);
  scanf("%lf %lf", &x0, &y0);
  for (i = 0; i < n; i++) {
    scanf("%lf %lf", &x, &y);
    v.push_back(make_pair(x, y));
  }
  mn = (double)LONG_LONG_MAX, mx = 0.0;
  for (i = 0; i < n; i++) {
    t1 = dist(x0, y0, v[i].first, v[i].second);
    mn = min(mn, t1);
    mx = max(mx, t1);
  }
  for (i = 0; i < n; i++) {
    j = (i + 1) % n;
    t1 = dist(v[i].first, v[i].second, v[j].first, v[j].second);
    t2 = dist(v[i].first, v[i].second, x0, y0);
    t3 = dist(v[j].first, v[j].second, x0, y0);
    if (t2 < t1 + t3 && t3 < t1 + t2) {
      t2 = ((v[i].second - v[j].second) * x0) -
           ((v[i].first - v[j].first) * y0) + (v[i].first * v[j].second) -
           (v[i].second * v[j].first);
      t2 = (t2 * t2);
      t3 = t2 / t1;
      mn = min(mn, t3);
      mx = max(mx, t3);
    }
  }
  t1 = (double)3.14159265359 * (mx - mn);
  printf("%0.6lf\n", t1);
  return 0;
}
