#include <bits/stdc++.h>
using namespace std;
vector<complex<double> > vec;
double minDist(complex<double> &a, complex<double> &b, complex<double> &p) {
  complex<double> ab = ((b) - (a)), ap = ((p) - (a)), ba = ((a) - (b)),
                  bp = ((p) - (b));
  double distPB = sqrt(((conj(bp) * (bp)).real())),
         distPA = sqrt(((conj(ap) * (ap)).real())),
         distAB = sqrt(((conj(ab) * (ab)).real()));
  double thetaA = acos(((conj(ab) * (ap)).real()) / distAB / distPA);
  double thetaB = acos(((conj(ba) * (bp)).real()) / distAB / distPB);
  double ans;
  if (fabs(thetaA) >= 3.14159265358979323846 / 2)
    ans = distPA;
  else if (fabs(thetaB) >= 3.14159265358979323846 / 2)
    ans = distPB;
  else
    ans = sin(fabs(thetaA)) * distPA;
  return ans;
}
int main() {
  int n;
  long long px, py, tempX, tempY;
  scanf("%d %I64d %I64d", &n, &px, &py);
  double maxi = 0, mini = 1E12, dist;
  for (int i = 0; i < n; i++) {
    scanf("%I64d %I64d", &tempX, &tempY);
    dist = sqrt((tempX - px) * (tempX - px) + (tempY - py) * (tempY - py));
    maxi = max(maxi, dist);
    complex<double> xx = complex<double>(tempX, tempY);
    vec.push_back(xx);
  }
  vec.push_back(vec[0]);
  maxi *= maxi;
  complex<double> P = complex<double>(px, py);
  for (int i = 0; i < n; i++) {
    mini = min(mini, minDist(vec[i], vec[i + 1], P));
  }
  mini *= mini;
  double ans = (maxi - mini);
  ans *= 3.14159265358979323846;
  printf("%0.8f", ans);
  return 0;
}
