#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
  double dis;
} p[4];
int x0, y00;
double getdis() {
  double a, b, c;
  a = sqrt(p[0].dis);
  b = sqrt(p[1].dis);
  c = sqrt((p[1].x - p[0].x * 1.0) * (p[1].x - p[0].x) +
           (p[1].y - p[0].y * 1.0) * (p[1].y - p[0].y));
  double d = (a + b + c) / 2;
  d = sqrt(d * (d - a) * (d - b) * (d - c));
  d = d / c * 2;
  if (b * b + c * c - a * a < 0) d = 1e9 + 7;
  if (a * a + c * c - b * b < 0) d = 1e9 + 7;
  d = min(d, a);
  d = min(d, b);
  return d;
}
int main() {
  int n, i, j;
  while (scanf("%d %d %d", &n, &x0, &y00) != EOF) {
    p[2].dis = -1, p[0].dis = p[1].dis = 1e9 + 7;
    int x1, y1;
    double dmin = 1e9 + 7;
    for (i = 0; i < n; i++) {
      scanf("%d %d", &x1, &y1);
      double d = (x1 - x0 * 1.0) * (x1 - x0) + (y1 - y00 * 1.0) * (y1 - y00);
      if (d > p[2].dis) {
        p[2].dis = d, p[2].x = x1, p[2].y = y1;
      }
      if (i) {
        p[1].dis = p[0].dis, p[1].x = p[0].x, p[1].y = p[0].y;
        p[0].dis = d, p[0].x = x1, p[0].y = y1;
        dmin = min(dmin, getdis());
      } else
        p[3].dis = p[0].dis = d, p[3].x = p[0].x = x1, p[3].y = p[0].y = y1;
    }
    p[1].dis = p[0].dis, p[1].x = p[0].x, p[1].y = p[0].y;
    p[0].dis = p[3].dis, p[0].x = p[3].x, p[0].y = p[3].y;
    dmin = min(dmin, getdis());
    double area = 3.1415926 * (p[2].dis - dmin * dmin);
    printf("%lf\n", area);
  }
  return 0;
}
