#include <bits/stdc++.h>
using namespace std;
struct Vector {
  double x, y;
  Vector() {}
  Vector(double x, double y) : x(x), y(y) {}
  Vector(Vector const &v) : x(v.x), y(v.y) {}
  Vector(Vector const &a, Vector const &b) : x(b.x - a.x), y(b.y - a.y) {}
  double length() const { return sqrt(x * x + y * y); }
  Vector norm() const {
    double len = length();
    return Vector(x / len, y / len);
  }
  Vector operator*(double c) const { return Vector(x * c, y * c); }
};
struct Line {
  double a, b, c;
  Line(Vector const &x, Vector const &y) {
    a = y.y - x.y;
    b = x.x - y.x;
    c = -(a * x.x + b * x.y);
  }
  Vector norm() const { return Vector(a, b); }
  Vector perp(Vector const &v) {
    Vector n = norm().norm();
    double dist = (a * v.x + b * v.y + c) / sqrt(a * a + b * b);
    Vector to = n * dist;
    return Vector(v.x - to.x, v.y - to.y);
  }
};
bool on(Vector const &a, Vector const &b, Vector const &p) {
  return ((a.x <= p.x && b.x >= p.x) || (a.x >= p.x && b.x <= p.x)) &&
         ((a.y <= p.y && b.y >= p.y) || (a.y >= p.y && b.y <= p.y));
}
int main() {
  int n;
  Vector c;
  cin >> n >> c.x >> c.y;
  vector<Vector> v(n);
  double min_dist = 1e20, max_dist = 0;
  for (int i = 0; i != n; ++i) {
    cin >> v[i].x >> v[i].y;
    double dist = Vector(v[i], c).length();
    min_dist = min(min_dist, dist);
    max_dist = max(max_dist, dist);
  }
  for (int i = 0; i != n; ++i) {
    int next = (i + 1) % n;
    Line l(v[i], v[next]);
    Vector p = l.perp(c);
    if (!on(v[i], v[next], p)) continue;
    double dist = Vector(p, c).length();
    min_dist = min(min_dist, dist);
    max_dist = max(max_dist, dist);
  }
  cout.precision(30);
  cout << fixed
       << 3.14159265358979323846L * (max_dist * max_dist - min_dist * min_dist)
       << '\n';
  return 0;
}
