#include <bits/stdc++.h>
using namespace std;
int n;
double ma = 0, mi = 1000000000000000000, a;
double eps = 1e-8;
struct point {
  double x;
  double y;
} p[1000009], p1, p2;
bool isZero(double x) { return (x > 0 ? x : -x) < eps; }
double dist(double a1, double b1, double a2, double b2, double a, double b) {
  double s1 = (a1 - a) * (a1 - a) + (b1 - b) * (b1 - b),
         s2 = (a2 - a) * (a2 - a) + (b2 - b) * (b2 - b), s, x, y, x2, y2, ss;
  while (!isZero(a1 - a2) || !isZero(b1 - b2)) {
    x = (a1 + a2) / 2;
    y = (b1 + b2) / 2;
    x2 = (x + a2) / 2;
    y2 = (y + b2) / 2;
    s = (x - a) * (x - a) + (y - b) * (y - b);
    ss = (x2 - a) * (x2 - a) + (y2 - b) * (y2 - b);
    if (ss > s) {
      s2 = ss;
      a2 = x2;
      b2 = y2;
    } else {
      s1 = s;
      a1 = x;
      b1 = y;
    }
  }
  return s1;
}
int main() {
  scanf("%d%lf%lf", &n, &p1.x, &p1.y);
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf", &p[i].x, &p[i].y);
    a = (p[i].x - p1.x) * (p[i].x - p1.x) + (p[i].y - p1.y) * (p[i].y - p1.y);
    if (a > ma) ma = a;
    if (a < mi) mi = a;
    if (i) {
      a = dist(p[i - 1].x, p[i - 1].y, p[i].x, p[i].y, p1.x, p1.y);
      if (a < mi) mi = a;
    }
  }
  a = dist(p[n - 1].x, p[n - 1].y, p[0].x, p[0].y, p1.x, p1.y);
  if (a < mi) mi = a;
  printf("%.8lf\n", (ma - mi) * acos(-1.0));
  return 0;
}
