#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const double pi = 3.1415926535;
int n;
long long x, y, xx[100005], yy[100005];
double mn = 1e18, mx = -1e18;
struct vec {
  double i, j;
  vec() : i(0.0), j(0.0) {}
  vec(double lo, double hi) : i(lo), j(hi) {}
  double dot(const vec &rhs) { return i * rhs.i + j * rhs.j; }
  vec operator+(const vec &rhs) { return vec(i + rhs.i, j + rhs.j); }
  vec operator-(const vec &rhs) { return vec(i - rhs.i, j - rhs.j); }
  vec operator*(double x) { return vec(i * x, j * x); }
};
double getT(vec a, vec d, vec p) {
  return (d.i * p.i + d.j * p.j - d.i * a.i - d.j * a.j) /
         (d.i * d.i + d.j * d.j);
}
void check(int x1, int y1, int x2, int y2) {
  vec a(x1, y1);
  vec d(x2 - x1, y2 - y1);
  vec p(x, y);
  double t = getT(a, d, p);
  if (0 <= t && t <= 1) {
    vec pp = a + d * t;
    double nx = pp.i, ny = pp.j;
    double dist = sqrt((nx - x) * (nx - x) + (ny - y) * (ny - y));
    mn = min(mn, dist);
  }
}
int solve() {
  cin >> n >> x >> y;
  for (int i = 0; i < n; i++) cin >> xx[i] >> yy[i];
  for (int i = 0; i < n; i++) {
    double dist = sqrt((x - xx[i]) * (x - xx[i]) + (y - yy[i]) * (y - yy[i]));
    mn = min(mn, dist);
    mx = max(mx, dist);
  }
  for (int i = 0; i < n; i++)
    check(xx[i], yy[i], xx[(i + 1) % n], yy[(i + 1) % n]);
  cout << fixed << setprecision(8) << mx * mx * pi - mn * mn * pi << endl;
  return 0;
}
int main() {
  ios::sync_with_stdio(0);
  solve();
  return 0;
}
