#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
} p[100005], t;
int n;
double dis(point a, point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double dot(point a, point b) { return a.x * b.x + a.y * b.y; }
double len(point a) { return sqrt(dot(a, a)); }
double point_to_segment(point a, point b, point c) {
  point v1, v2, v3;
  v1.x = c.x - b.x;
  v1.y = c.y - b.y;
  v2.x = a.x - b.x;
  v2.y = a.y - b.y;
  v3.x = a.x - c.x;
  v3.y = a.y - c.y;
  if (dot(v1, v2) < 0)
    return len(v2);
  else if (dot(v1, v3) > 0)
    return len(v3);
  else
    return fabs((v1.x * v2.y - v2.x * v1.y) / len(v1));
}
int main() {
  scanf("%d", &n);
  scanf("%lf%lf", &t.x, &t.y);
  for (int i = 0; i < n; i++) scanf("%lf%lf", &p[i].x, &p[i].y);
  p[n].x = p[0].x;
  p[n].y = p[0].y;
  double Max = 0;
  double Min = 1000000000.0;
  for (int i = 0; i < n; i++) {
    Max = max(Max, dis(t, p[i]));
    Min = min(Min, point_to_segment(t, p[i], p[i + 1]));
  }
  printf("%0.10f\n", Max * Max * acos(-1.0) - Min * Min * acos(-1.0));
  return 0;
}
