#include <bits/stdc++.h>
using namespace std;
const int nax = 1e5 + 5;
const double eps = 1e-9;
int n;
pair<double, double> orig;
double dist(pair<double, double> p1, pair<double, double> p2) {
  return (p1.first - p2.first) * (p1.first - p2.first) +
         (p1.second - p2.second) * (p1.second - p2.second);
}
struct Line {
  pair<double, double> pi, pf;
  double a, b, c;
  void init(pair<double, double> p1, pair<double, double> p2) {
    pi = p1, pf = p2;
    a = p2.second - p1.second;
    b = p1.first - p2.first;
    c = a * p1.first + b * p1.second;
  }
  bool inside(pair<double, double> p) {
    return sqrt(dist(p, pi)) + sqrt(dist(p, pf)) <= sqrt(dist(pi, pf)) + eps;
  }
  double shortestDist() {
    if (b == 0) {
      if (inside({c / a, orig.second})) {
        return (c / a - orig.first) * (c / a - orig.first);
      } else {
        return min(dist(orig, pi), dist(orig, pf));
      }
    } else {
      pair<double, double> pt;
      double top = a * c / b + b * orig.first - a * orig.second,
             bot = b + a * a / b;
      pt.first = top / bot, pt.second = (c - a * pt.first) / b;
      return inside(pt) ? dist(orig, pt) : min(dist(orig, pi), dist(orig, pf));
    }
  }
  double longestDist() { return max(dist(orig, pi), dist(orig, pf)); }
  void print() { printf("%lf %lf %lf\n", a, b, c); }
};
Line L[nax];
pair<double, double> P[nax];
int main() {
  scanf("%d", &n);
  scanf("%lf %lf", &orig.first, &orig.second);
  for (int i = 0; i < n; ++i) scanf("%lf %lf", &P[i].first, &P[i].second);
  for (int i = 0; i < n; ++i) L[i].init(P[i], P[(i + 1) % n]);
  double r1 = 1e13, r2 = 0;
  for (int i = 0; i < n; ++i) {
    r1 = min(r1, L[i].shortestDist());
    r2 = max(r2, L[i].longestDist());
  }
  cout << fixed << setprecision(12) << 3.14159265358979323846 * (r2 - r1)
       << endl;
  return 0;
}
