#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int SIZE = 1e6 + 10;
const double EPS = 1e-12;
const double PI = acos(-1);
struct Point {
  double x, y;
  Point(double _x = 0, double _y = 0) {
    x = _x;
    y = _y;
  }
  Point operator-(const Point& b) { return Point(x - b.x, y - b.y); }
  Point operator+(const Point& b) { return Point(x + b.x, y + b.y); }
  Point operator*(const double v) { return Point(x * v, y * v); }
  double operator*(const Point& b) { return x * b.y - y * b.x; }
  double operator^(const Point& b) { return x * b.x + y * b.y; }
  bool operator<(const Point& b) const {
    if (fabs(x - b.x) < EPS) {
      if (fabs(y - b.y) < EPS) return 0;
      return y < b.y;
    }
    return x < b.x;
  }
  double angle() { return atan2(y, x); }
  double dis() { return sqrt(x * x + y * y); }
  void scan() { scanf("%lf%lf", &x, &y); }
  void print() { printf("%.9f %.9f\n", x, y); }
} O, p[SIZE];
int main() {
  int(n);
  scanf("%d", &n);
  O.scan();
  for (int i = 0; i < (n); ++i) p[i].scan();
  p[n] = p[0];
  double ma = 0, mi = 1e18;
  if (n == 1) {
    puts("0.000000");
    return 0;
  }
  for (int i = 0; i < (n); ++i) {
    double tmp = (p[i] - O).dis();
    ma = max(ma, tmp);
    mi = min(mi, tmp);
    if (((p[i] - p[i + 1]) ^ (O - p[i + 1])) >= 0 &&
        ((p[i + 1] - p[i]) ^ (O - p[i])) >= 0) {
      mi = min(mi, fabs((p[i] - p[i + 1]) * (O - p[i + 1])) /
                       (p[i] - p[i + 1]).dis());
    }
  }
  printf("%.18f\n", (ma * ma - mi * mi) * PI);
  return 0;
}
