#include <bits/stdc++.h>
double const MOD = 1000000007;
int const N = 1000005;
double const LN = 20;
double const inf = 1e18 + 5;
using namespace std;
struct point {
  double x, y;
  point(double x = 0, double y = 0) : x(x), y(y) {}
  point operator-(const point z) const { return point(x - z.x, y - z.y); }
};
double dot_pro(point a, point b) { return a.x * b.x + a.y * b.y; }
double dist(point a) {
  double ans = dot_pro(a, a);
  return ans;
}
double cross_pro(point a, point b) {
  double ans = a.x * b.y - 1 * b.x * a.y;
  return ans;
}
point p[N];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  cin >> n;
  point c;
  cin >> c.x >> c.y;
  for (int i = 0; i < n; i++) {
    double x, y;
    cin >> x >> y;
    p[i] = point(x, y);
  }
  double mx = 0;
  double mi = inf;
  for (int i = 0; i < n; i++) {
    point p1 = p[i] - c;
    mx = max(mx, dist(p1));
    mi = min(mi, dist(p1));
  }
  for (int i = 0; i < n; i++) {
    double ok1, ok2;
    {
      point p1 = p[(i + 1) % n] - p[i];
      point p2 = c - p[i];
      ok1 = dot_pro(p1, p2);
    }
    {
      point p1 = p[i] - p[(i + 1) % n];
      point p2 = c - p[(i + 1) % n];
      ok2 = dot_pro(p1, p2);
    }
    point p1 = p[i] - p[(i + 1) % n];
    point p2 = c - p[(i + 1) % n];
    double ans = cross_pro(p1, p2);
    if (ok1 >= 0 && ok2 >= 0) {
      double op = (ans * ans) / dist(p1);
      mi = min(mi, op);
    }
  }
  double ans = acos(-1);
  ans = ans * (mx - mi);
  printf("%.10f\n", ans);
  return 0;
}
