#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, y;
  Point() { x = y = 0; }
  Point(double ix, double iy) {
    x = ix;
    y = iy;
  }
};
inline Point operator+(Point a, Point b) { return Point(a.x + b.x, a.y + b.y); }
inline Point operator-(Point a, Point b) { return Point(a.x - b.x, a.y - b.y); }
inline Point operator*(double x, Point a) { return Point(x * a.x, x * a.y); }
inline double dist(Point a) { return sqrt(a.x * a.x + a.y * a.y); }
inline double compute(Point a, Point b) {
  double lo = 0.0, hi = 1.0;
  for (int iter = 0; iter < 50; iter++) {
    double t1 = (2 * lo + hi) / 3;
    double t2 = (lo + 2 * hi) / 3;
    Point c1 = t1 * a + (1 - t1) * b;
    Point c2 = t2 * a + (1 - t2) * b;
    if (dist(c1) > dist(c2))
      lo = t1;
    else
      hi = t2;
  }
  double t = (lo + hi) / 2;
  Point c = t * a + (1 - t) * b;
  return dist(c);
}
const int N = 100005;
Point pp[N];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n;
  cin >> n;
  Point center;
  cin >> center.x >> center.y;
  double maxi = 0.0;
  for (int i = 0; i < n; i++) {
    cin >> pp[i].x >> pp[i].y;
    pp[i] = pp[i] - center;
    maxi = max(maxi, dist(pp[i]));
  }
  double mini = maxi;
  for (int i = 0; i < n; i++) {
    mini = min(mini, compute(pp[i], pp[(i + 1) % n]));
  }
  double PI = acos(-1.0);
  cout << setprecision(30);
  cout << PI * (maxi - mini) * (maxi + mini) << endl;
  return 0;
}
