#include <bits/stdc++.h>
using namespace std;
pair<double, double> center;
long long n;
inline double sqdist(pair<double, double> &a, pair<double, double> &b) {
  return (a.first - b.first) * (a.first - b.first) +
         (a.second - b.second) * (a.second - b.second);
}
inline double dotProduct(pair<double, double> &a, pair<double, double> &b) {
  return (center.first - a.first) * (b.first - a.first) +
         (center.second - a.second) * (b.second - a.second);
}
inline double distFromLine(pair<double, double> &a, pair<double, double> &b) {
  double c = a.first, d = a.second;
  double e = b.first, first = b.second;
  double x = center.first, y = center.second;
  double denom = (first - d) * (first - d) + (c - e) * (c - e);
  double num =
      ((first - d) * x + (c - e) * y - ((first - d) * c + (c - e) * d));
  num = num * num;
  return num / denom;
}
inline double nearest(vector<pair<double, double> > &points,
                      vector<double> &distances) {
  double ans = 1e15;
  long long i1, i2;
  for (long long i = 0; i < n; ++i) {
    i1 = i;
    i2 = i + 1;
    if (i2 == n) i2 = 0;
    double dp = dotProduct(points[i1], points[i2]);
    double len = sqdist(points[i1], points[i2]);
    if (dp >= 0 && dp < len)
      ans = min(ans, distFromLine(points[i1], points[i2]));
  }
  return ans;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> center.first >> center.second;
  vector<pair<double, double> > points(n);
  for (long long i = 0; i < n; i++) cin >> points[i].first >> points[i].second;
  vector<double> distances(n);
  for (long long i = 0; i < n; i++) distances[i] = sqdist(points[i], center);
  double ri2, ro2;
  ro2 = *max_element(distances.begin(), distances.end());
  ri2 = *min_element(distances.begin(), distances.end());
  ri2 = min(ri2, nearest(points, distances));
  cout << fixed << setprecision(18);
  ;
  cout << 3.141592653589793238 * (ro2 - ri2);
}
