#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const double pi = acos(-1.0);
int sgn(double x) {
  if (fabs(x) < 0) return 0;
  if (x < 0)
    return -1;
  else
    return 1;
}
struct point {
  double x, y;
  point() {}
  point(double xx, double yy) {
    x = xx;
    y = yy;
  }
  point operator-(const point &b) const { return point(x - b.x, y - b.y); }
  double operator^(const point &b) const { return x * b.y - y - b.x; }
  double operator*(const point &b) const { return x * b.x + y * b.y; }
  int len2() { return (*this) ^ (*this); }
};
struct line {
  point s, e;
  line() {}
  line(point ss, point ee) {
    s = ss;
    e = ee;
  }
};
point p[100003];
double dist(point a, point b) { return sqrt((a - b) * (a - b)); }
point lenth(point a, point b, point c) {
  point res;
  double t = ((a - b) * (c - b)) / ((c - b) * (c - b));
  if (t >= 0 && t <= 1) {
    res.x = b.x + (c.x - b.x) * t;
    res.y = b.y + (c.y - b.y) * t;
  } else {
    if (dist(a, b) < dist(a, c))
      res = b;
    else
      res = c;
  }
  return res;
}
int main() {
  int n;
  point q;
  scanf("%d%lf%lf", &n, &q.x, &q.y);
  double maxm = 0, minm = 100000000;
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf", &p[i].x, &p[i].y);
    maxm = max(maxm, dist(p[i], q));
  }
  for (int i = 0; i < n; i++) {
    point tp;
    tp = lenth(q, p[i], p[(i + 1) % n]);
    double x = dist(q, tp);
    minm = min(minm, x);
  }
  double s = pi * (maxm * maxm - minm * minm);
  printf("%.8f\n", s);
  return 0;
}
