#include <bits/stdc++.h>
constexpr auto PI = 3.141592653589793238462643383279502884L;
template <typename T>
T Clamp(T v, T min, T max) {
  return std::min<T>(max, std::max<T>(min, v));
}
double Dist(double x, double y) { return std::sqrt(x * x + y * y); }
double Dist(double x1, double y1, double x2, double y2) {
  return Dist(x1 - x2, y1 - y2);
}
double DistToLineSegment(double x0, double y0, double x1, double y1, double x2,
                         double y2) {
  auto x01 = x0 - x1;
  auto y01 = y0 - y1;
  auto x21 = x2 - x1;
  auto y21 = y2 - y1;
  auto dot = x01 * x21 + y01 * y21;
  auto len2 = x21 * x21 + y21 * y21;
  double t = (len2 == 0) ? 0 : Clamp<double>(dot / len2, 0, 1);
  return Dist(x0, y0, x1 + t * x21, y1 + t * y21);
}
double Area(double r) { return PI * r * r; }
struct Point {
  double x;
  double y;
};
int main() {
  int64_t n;
  double x0, y0;
  std::cin >> n >> x0 >> y0;
  std::vector<Point> p(n);
  for (int64_t i = 0; i < n; i++) {
    double x, y;
    std::cin >> x >> y;
    p[i] = Point{x, y};
  }
  double rmin = std::numeric_limits<double>::infinity();
  double rmax = -rmin;
  for (int64_t i = 0; i < n; i++) {
    rmax = std::max(rmax, Dist(x0, y0, p[i].x, p[i].y));
    int64_t j = (i + 1) % n;
    rmin = std::min(rmin,
                    DistToLineSegment(x0, y0, p[i].x, p[i].y, p[j].x, p[j].y));
  }
  printf("%.18f\n", Area(rmax) - Area(rmin));
}
