#include <bits/stdc++.h>
using namespace std;
inline void scanint(int &x) {
  register int c = 0;
  x = 0;
  int flag = 0;
  for (; ((c != 45) && (c < 48 || c > 57)); c = getchar())
    ;
  for (; ((c == 45) || (c > 47 && c < 58)); c = getchar()) {
    if (c == 45)
      flag = 1;
    else
      x = (x << 1) + (x << 3) + c - 48;
  }
  if (flag) x = -x;
}
double dist(double x1, double x2, double y1, double y2) {
  return ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
struct point {
  double x, y;
} p[100005];
double xx, yy;
double fun(point p1, point p2) {
  double t1 =
      abs((p2.y - p1.y) * xx - (p2.x - p1.x) * yy + p2.x * p1.y - p2.y * p1.x);
  double t2 = ((p2.y - p1.y) * (p2.y - p1.y) + (p2.x - p1.x) * (p2.x - p1.x));
  return (t1 * t1) / t2;
}
bool angle(point p1, point p2) {
  double a = dist(p2.x, p1.x, p2.y, p1.y);
  double b = dist(p2.x, xx, p2.y, yy);
  double c = dist(xx, p1.x, yy, p1.y);
  return (b * b < a * a + c * c);
}
int main() {
  int n, j, i;
  scanf("%d", &n);
  cin >> xx >> yy;
  double minn = 999999999999999999.0;
  double maxx = 0;
  for (i = 0; i < n; i++) {
    cin >> p[i].x;
    cin >> p[i].y;
    minn = min(minn, dist(xx, p[i].x, yy, p[i].y));
    maxx = max(maxx, dist(xx, p[i].x, yy, p[i].y));
  }
  for (i = 0; i < n; i++) {
    j = (i + 1) % n;
    if (angle(p[i], p[j]) && angle(p[j], p[i])) {
      minn = min(minn, fun(p[i], p[j]));
    }
  }
  double an = (acos(-1) * maxx) - (acos(-1) * minn);
  printf("%0.10lf\n", an);
  return 0;
}
