#include <bits/stdc++.h>
using namespace std;
double n, x, y, a, b;
vector<pair<double, double> > v;
set<double> s;
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 (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() {
  cin >> n >> x >> y;
  for (int i = 0; i < n; i++) {
    cin >> a >> b;
    v.push_back(make_pair(a, b));
  }
  for (int i = 0; i < n; i++) {
    s.insert((x - v[i].first) * (x - v[i].first) +
             (y - v[i].second) * (y - v[i].second));
  }
  for (int i = 0; i < n - 1; i++) {
    double ans = FindDistanceToSegment(v[i].first, v[i].second, v[i + 1].first,
                                       v[i + 1].second, x, y);
    s.insert(ans);
  }
  double ans = FindDistanceToSegment(v[0].first, v[0].second, v[n - 1].first,
                                     v[n - 1].second, x, y);
  s.insert(ans);
  double fi = *s.begin();
  double ff = *s.rbegin();
  cout << setprecision(24) << 3.14159265358979323846 * (ff - fi) << endl;
  return 0;
}
