#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.00);
const long long inf = 1000000000000000000;
double EPS = 1e-12;
struct PT {
  double x, y;
  PT() {}
  PT(double x, double y) : x(x), y(y) {}
  PT(const PT &p) : x(p.x), y(p.y) {}
  PT operator+(const PT &p) const { return PT(x + p.x, y + p.y); }
  PT operator-(const PT &p) const { return PT(x - p.x, y - p.y); }
  PT operator*(double c) const { return PT(x * c, y * c); }
  PT operator/(double c) const { return PT(x / c, y / c); }
};
double dot(PT p, PT q) { return p.x * q.x + p.y * q.y; }
double dist2(PT p, PT q) { return dot(p - q, p - q); }
double cross(PT p, PT q) { return p.x * q.y - p.y * q.x; }
PT RotateCCW90(PT p) { return PT(-p.y, p.x); }
PT RotateCW90(PT p) { return PT(p.y, -p.x); }
PT RotateCCW(PT p, double t) {
  return PT(p.x * cos(t) - p.y * sin(t), p.x * sin(t) + p.y * cos(t));
}
PT ProjectPointLine(PT a, PT b, PT c) {
  return a + (b - a) * dot(c - a, b - a) / dot(b - a, b - a);
}
PT ProjectPointSegment(PT a, PT b, PT c) {
  double r = dot(b - a, b - a);
  if (fabs(r) < EPS) return a;
  r = dot(c - a, b - a) / r;
  if (r < 0.00) return a;
  if (r > 1.00) return b;
  return a + (b - a) * r;
}
double DistancePointSegment(PT a, PT b, PT c) {
  return sqrt(dist2(c, ProjectPointSegment(a, b, c)));
}
vector<PT> v;
int main() {
  int n;
  cin >> n;
  PT base;
  cin >> base.x >> base.y;
  double near = 1e20;
  double far = 0.00;
  for (int i = 1; i <= n; i++) {
    PT p;
    cin >> p.x >> p.y;
    v.push_back(p);
    far = max(far, sqrt(dist2(p, base)));
  }
  for (int i = 0; i < (n - 1); i++) {
    double dd = DistancePointSegment(v.at(i), v.at(i + 1), base);
    near = min(near, dd);
    far = max(far, dd);
  }
  double dd = DistancePointSegment(v.at(0), v.at(n - 1), base);
  near = min(near, dd);
  far = max(far, dd);
  double r = near;
  double R = far;
  double ans = pi * ((R * R) - (r * r));
  cout.precision(20);
  cout << fixed << ans << endl;
  return 0;
}
