#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  int id;
} pot[100000], po;
int n;
double cross(Point p, Point p1, Point p2) {
  double x1 = p1.x - p.x, y1 = p1.y - p.y;
  double x2 = p2.x - p.x, y2 = p2.y - p.y;
  return x1 * y2 - x2 * y1;
}
double dis2(Point p1, Point p2) {
  return sqrt(pow(p1.x - p2.x, 2.0) + pow(p1.y - p2.y, 2.0));
}
double disptoseg(Point p, Point p1, Point p2) {
  if (dis2(p1, p2) == 0) return dis2(p, p1);
  Point t = po;
  t.y += p1.x - p2.x;
  t.x += p2.y - p1.y;
  if (cross(t, p, p1) * cross(t, p, p2) >= 0) {
    return min(dis2(p, p1), dis2(p, p2));
  }
  return fabs(cross(p, p1, p2)) / dis2(p1, p2);
}
int main() {
  cin >> n >> po.x >> po.y;
  {
    for (int i = 0; i < n; ++i) {
      cin >> pot[i].x >> pot[i].y;
    }
    pot[n] = pot[0];
    double ans = 1e30;
    double mmax = 0;
    double tmp;
    for (int i = 0; i < n; ++i) {
      tmp = disptoseg(po, pot[i], pot[i + 1]);
      if (tmp < ans) ans = tmp;
      tmp = dis2(po, pot[i]);
      if (tmp > mmax) mmax = tmp;
    }
    printf("%.20f\n", ((mmax * mmax) - (ans * ans)) *
                          3.141592653589793238462643383279502884);
  }
  return 0;
}
