#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  double d;
} a[100005];
bool comp(const point a, const point b) { return a.d > b.d; }
bool cmp(const double a, const double b) { return a < b; }
double dist(point a, point b) {
  return sqrt((double)(1LL * (a.x - b.x) * (a.x - b.x) +
                       1LL * (a.y - b.y) * (a.y - b.y)));
}
double dot(point a, point b, point c) {
  return (c.x - a.x) * (b.x - a.x) + (c.y - a.y) * (b.y - a.y);
}
int main(void) {
  int n;
  point ss;
  double b[100005];
  while (scanf("%d%lf%lf", &n, &ss.x, &ss.y) == 3) {
    int cnt = 0;
    double len, p, s;
    for (int i = 0; i < n; i++) {
      scanf("%lf%lf", &a[i].x, &a[i].y);
      a[i].d = sqrt((double)(1LL * (a[i].x - ss.x) * (a[i].x - ss.x) +
                             1LL * (a[i].y - ss.y) * (a[i].y - ss.y)));
      if (i == 0 || dot(a[i], a[i - 1], ss) <= 0 ||
          dot(a[i - 1], a[i], ss) <= 0)
        continue;
      len = dist(a[i], a[i - 1]);
      p = (len + a[i].d + a[i - 1].d) / 2.0;
      s = sqrt(p * (p - a[i].d) * (p - a[i - 1].d) * (p - len));
      b[cnt++] = 2.0 * s / len;
    }
    if (dot(a[n - 1], a[0], ss) > 0 && dot(a[0], a[n - 1], ss) > 0) {
      len = dist(a[n - 1], a[0]);
      p = (len + a[n - 1].d + a[0].d) / 2.0;
      s = sqrt(p * (p - a[n - 1].d) * (p - a[0].d) * (p - len));
      b[cnt++] = 2.0 * s / len;
    }
    sort(a, a + n, comp);
    if (cnt > 0)
      sort(b, b + cnt, cmp);
    else
      b[0] = (double)1000005;
    double t = min(a[n - 1].d, b[0]);
    double dis = a[0].d * a[0].d - t * t;
    printf("%.18lf\n", dis * 4 * atan(1.0));
  }
  return 0;
}
