#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
const int MAXN = 100500;
const double eps = 1e-9;
int dcmp(const double x) {
  if (x < -eps) return -1;
  if (x > eps) return 1;
  return 0;
}
struct Point {
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
};
bool operator==(Point a, Point b) {
  return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}
Point operator-(Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double norm2(Point p) { return p.x * p.x + p.y * p.y; }
double square(double x) { return x * x; }
double diss2(Point a, Point b, Point p) {
  if (dcmp(dot(p - a, b - a)) <= 0 || dcmp(dot(p - b, a - b)) <= 0)
    return min(norm2(a - p), norm2(b - p));
  if (a == b) return norm2(a - p);
  return square(cross(p - a, b - a)) / norm2(a - b);
}
int n;
Point p[MAXN], t;
double dis1[MAXN], dis2[MAXN];
int main(void) {
  cin >> n >> t.x >> t.y;
  for (int i = 0; i < n; ++i) cin >> p[i].x >> p[i].y;
  for (int i = 0; i < n; ++i) dis1[i] = norm2(p[i] - t);
  for (int i = 0; i < n; ++i) dis2[i] = diss2(p[i], p[(i + 1) % n], t);
  double maxi = *max_element(dis1, dis1 + n);
  double mini = *min_element(dis2, dis2 + n);
  printf("%.15f\n", (maxi - mini) * pi);
  return 0;
}
