#include <bits/stdc++.h>
using namespace std;
double FindDistanceToSegment(double x1, double y1, double x2, double y2,
                             double pointX, double pointY) {
  double diffX = x2 - x1;
  float diffY = y2 - y1;
  if ((diffX == 0) && (diffY == 0)) {
    diffX = pointX - x1;
    diffY = pointY - y1;
    return sqrt(diffX * diffX + diffY * diffY);
  }
  float t = ((pointX - x1) * diffX + (pointY - y1) * diffY) /
            (diffX * diffX + diffY * diffY);
  if (t < 0) {
    diffX = pointX - x1;
    diffY = pointY - y1;
  } else if (t > 1) {
    diffX = pointX - x2;
    diffY = pointY - y2;
  } else {
    diffX = pointX - (x1 + t * diffX);
    diffY = pointY - (y1 + t * diffY);
  }
  return sqrt(diffX * diffX + diffY * diffY);
}
int main() {
  int n;
  pair<long long, long long> p;
  cin >> n >> p.first >> p.second;
  double distmin = INT_MAX, distmax = INT_MIN;
  pair<double, double> arr[n];
  for (int i = 0; i < n; i++) {
    double a, b;
    cin >> a >> b;
    arr[i].first = a;
    arr[i].second = b;
    distmax = max(distmax, hypot(a - p.first, b - p.second));
    if (i != 0)
      distmin = min(
          distmin, FindDistanceToSegment(a, b, arr[i - 1].first,
                                         arr[i - 1].second, p.first, p.second));
    if (i == n - 1)
      distmin = min(distmin, FindDistanceToSegment(
                                 arr[0].first, arr[0].second, arr[n - 1].first,
                                 arr[n - 1].second, p.first, p.second));
  }
  printf("%0.18lf", (distmax - distmin) * (distmax + distmin) * M_PI);
  return 0;
}
