#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  Point() {}
  Point(const double &x, const double &y) : x(x), y(y) {}
  void Read() { scanf("%lf%lf", &x, &y); }
  double sqrlen() { return x * x + y * y; }
  double len() { return sqrt(sqrlen()); }
} p, a[111111];
Point operator-(const Point &a, const Point &b) {
  return Point(a.x - b.x, a.y - b.y);
}
double minnn(Point p1, Point p2, Point p) {
  double ans = 0;
  double a, b, c;
  a = (p1 - p2).len();
  b = (p1 - p).len();
  c = (p2 - p).len();
  if (c + b == a) {
    ans = 0;
    return ans;
  }
  if (a <= 0.00001) {
    ans = b;
    return ans;
  }
  if (c * c >= a * a + b * b) {
    ans = b;
    return ans;
  }
  if (b * b >= a * a + c * c) {
    ans = c;
    return ans;
  }
  double p0 = (a + b + c) / 2;
  double s = sqrt(p0 * (p0 - a) * (p0 - b) * (p0 - c));
  ans = 2 * s / a;
  return ans;
}
int main() {
  int n;
  scanf("%d", &n);
  p.Read();
  double minn, maxn;
  for (int i = 1; i <= n; i++) {
    a[i].Read();
    if (i == 1)
      minn = maxn = (a[i] - p).sqrlen();
    else {
      double c = (a[i] - p).sqrlen();
      if (c > maxn) maxn = c;
      if (c < minn) minn = c;
      c = minnn(a[i], a[i - 1], p);
      c *= c;
      if (c < minn) minn = c;
    }
  }
  double c = minnn(a[1], a[n], p);
  c *= c;
  if (c < minn) minn = c;
  printf("%.8f\n", acos(-1.0) * (maxn - minn));
}
