#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
double mn = 1000000000, mx = -1000000000;
int n;
double px, py;
struct P {
  double x, y;
  friend double dis(P a) { return sqrt(a.x * a.x + a.y * a.y); }
  friend P operator-(P a, P b) { return (P){a.x - b.x, a.y - b.y}; }
  friend double operator*(P a, P b) { return a.x * b.y - a.y * b.x; }
  friend double operator/(P a, P b) { return a.x * b.x + a.y * b.y; }
} a[100005];
double dis(P a, P b, P c) {
  if ((c - a) / (b - a) > 0 && (c - b) / (a - b) > 0)
    return abs((a - b) * (c - b)) / dis(a - b);
  else
    return min(dis(a - c), dis(b - c));
}
int main() {
  n = read();
  px = read();
  py = read();
  for (int i = 1; i <= n; i++) a[i].x = read(), a[i].y = read();
  a[n + 1] = a[1];
  for (int i = 1; i <= n; i++) {
    double d1 = dis(a[i], a[i + 1], (P){px, py}), d2 = dis(a[i] - (P){px, py});
    mn = min(d1, mn);
    mx = max(d2, mx);
  }
  double ans = acos(-1) * (mx * mx - mn * mn);
  printf("%.10lf", ans);
  return 0;
}
