#include <bits/stdc++.h>
using namespace std;
const int Maxn = 100060;
class Point {
 public:
  double x, y;
  void read() { scanf("%lf%lf", &x, &y); }
  Point(double _x = 0, double _y = 0) : x(_x), y(_y) {}
  double len() { return sqrt(x * x + y * y); }
} P, v[Maxn];
const double pi = acos(-1);
const double eps = 1e-7;
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);
}
double dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double dis(Point a, Point b) {
  return sqrt((double)(a.x - b.x) * (a.x - b.x) +
              (double)(a.y - b.y) * (a.y - b.y));
}
double DisToLine(Point p, Point a, Point v2) {
  Point v1 = p - a;
  return fabs(cross(v2, v1) / v2.len());
}
int main() {
  int n;
  scanf("%d", &n);
  P.read();
  double R = 0, r = 1e9;
  for (int i = 1; i <= n; ++i) v[i].read();
  for (int i = 1; i <= n; ++i) {
    double len = dis(P, v[i]);
    R = max(R, len), r = min(r, len);
  }
  v[++n] = v[1];
  for (int i = 1; i < n; ++i) {
    if (dot(P - v[i], v[i + 1] - v[i]) >= 0 &&
        dot(P - v[i + 1], v[i] - v[i + 1]) >= 0) {
      r = min(r, DisToLine(P, v[i], v[i + 1] - v[i]));
    }
  }
  double area = pi * (R - r) * (R + r);
  printf("%.6lf\n", area);
  return 0;
}
