#include <bits/stdc++.h>
using namespace std;
const long double PIE = 3.14159265358979323846;
class Point {
 public:
  long double x, y;
  Point(long double x, long double y) : x(x), y(y) {}
};
long double distance(const Point& A, const Point& B) {
  return ((A.x - B.x) * (A.x - B.x)) + ((A.y - B.y) * (A.y - B.y));
}
long double cross(const Point& A, const Point& B) {
  return A.x * B.y - A.y * B.x;
}
long double dot(const Point& A, const Point& B) {
  return A.x * B.x + A.y * B.y;
}
Point vec(const Point& A, const Point& B) {
  return Point(A.x - B.x, A.y - B.y);
}
long double distance(const Point& P, const Point& A, const Point& B) {
  if (dot(vec(A, B), vec(B, P)) > 0) return distance(P, B);
  if (dot(vec(B, A), vec(A, P)) > 0) return distance(P, A);
  return ((cross(vec(A, B), vec(A, P))) * (cross(vec(A, B), vec(A, P)))) /
         distance(A, B);
}
void solve() {
  int n;
  cin >> n;
  int cx, cy;
  cin >> cx >> cy;
  Point C(cx, cy);
  vector<Point> P;
  for (int i = 1; i <= n; i++) {
    long double x, y;
    cin >> x >> y;
    P.emplace_back(x, y);
  }
  long double farthest = 0;
  for (Point p : P) {
    farthest = max(farthest, distance(C, p));
  }
  long double closest = farthest;
  for (Point p : P) {
    closest = min(closest, distance(C, p));
  }
  for (int i = 0; i < n; i++) {
    Point p1 = P[i];
    Point p2 = P[(i + 1) % n];
    closest = min(closest, distance(C, p1, p2));
  }
  cout << fixed << setprecision(20) << PIE * (farthest - closest) << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int t = 1;
  for (int i = 1; i <= t; i++) {
    solve();
  }
  return 0;
}
