#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void Read(T &x) {
  int f = 1;
  char t = getchar();
  while (t < '0' || t > '9') {
    if (t == '-') f = -1;
    t = getchar();
  }
  x = 0;
  while (t >= '0' && t <= '9') {
    x = x * 10 + t - '0';
    t = getchar();
  }
  x *= f;
}
template <class T>
inline void chkmin(T &x, T y) {
  if (x > y) x = y;
}
template <class T>
inline void chkmax(T &x, T y) {
  if (x < y) x = y;
}
const int maxn = 200005;
const double inf = 2e18;
const double pi = acos(-1.0);
struct point {
  long double x, y;
  point() {}
  point(long double x, long double y) : x(x), y(y) {}
  void read() { cin >> x >> y; }
};
point operator+(const point &a, const point &b) {
  return point(a.x + b.x, a.y + b.y);
}
point operator-(const point &a, const point &b) {
  return point(a.x - b.x, a.y - b.y);
}
point operator*(const point &a, long double v) {
  return point(a.x * v, a.y * v);
}
point operator/(const point &a, long double v) {
  return point(a.x / v, a.y / v);
}
long double operator^(const point &a, const point &b) {
  return a.x * b.y - a.y * b.x;
}
int n;
point P, g[maxn];
long double dis(point &a, point &b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
long double maxr = -inf, minr = inf;
void calc(point &a, point &b) {
  long double A = dis(a, P), B = dis(b, P), C = dis(a, b);
  long double area = (a - P) ^ (b - P);
  long double Height = area * area / C;
  if (A < B) swap(A, B);
  if (A > B + C) return;
  chkmax(maxr, Height);
  chkmin(minr, Height);
}
void input() {
  Read(n);
  P.read();
  for (register int i = 1; i <= n; i++) g[i].read();
  g[0] = g[n];
  for (register int i = 1; i <= n; i++) calc(g[i], g[i - 1]);
}
void solve() {
  for (register int i = 1; i <= n; i++) {
    chkmax(maxr, dis(g[i], P));
    chkmin(minr, dis(g[i], P));
  }
  printf("%.18lf\n", (double)(maxr - minr) * pi);
}
int main() {
  input();
  solve();
  return 0;
}
