#include <bits/stdc++.h>
using namespace std;
const int N = int(1e5) + 3;
int cmpfunc(const void *a, const void *b) { return *(int *)a - *(int *)b; }
vector<pair<long long int, long long int> > a[N];
double ax[N];
double ay[N];
double FindDistanceToSegment(double x1, double y1, double x2, double y2,
                             double pointX, double pointY) {
  double diffX = x2 - x1;
  double diffY = y2 - y1;
  if ((diffX == 0) && (diffY == 0)) {
    diffX = pointX - x1;
    diffY = pointY - y1;
    return sqrt(diffX * diffX + diffY * diffY);
  }
  double 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 diffX * diffX + diffY * diffY;
}
int main() {
  double n, x, y;
  cin >> n >> x >> y;
  for (int i = 0; i < n; i++) {
    long long int t1, t2;
    cin >> t1 >> t2;
    ax[i] = (double)t1;
    ay[i] = (double)t2;
  }
  double maxi = 0;
  double mini = DBL_MAX;
  for (int i = 0; i < n; i++) {
    maxi = max(maxi, (x - ax[i]) * (x - ax[i]) + (y - ay[i]) * (y - ay[i]));
    mini = min(mini, (x - ax[i]) * (x - ax[i]) + (y - ay[i]) * (y - ay[i]));
  }
  for (int i = 0; i < n - 1; i++) {
    mini = min(mini,
               FindDistanceToSegment(ax[i], ay[i], ax[i + 1], ay[i + 1], x, y));
  }
  mini = min(mini, FindDistanceToSegment(ax[0], ay[0], ax[int(n) - 1],
                                         ay[int(n) - 1], x, y));
  printf("%.8lf\n", double(3.141592653) * (maxi - mini));
  return 0;
}
