#include <bits/stdc++.h>
using namespace std;
inline double distsq(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);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  while (cin >> n) {
    pair<double, double> p;
    cin >> p.first >> p.second;
    vector<pair<double, double> > v(n);
    for (int i = 0; i < n; i++) cin >> v[i].first >> v[i].second;
    double minim = 1e100, maxim = 0;
    for (int i = 0; i < n; i++) {
      pair<double, double> act = v[i];
      pair<double, double> next = (v[(i + 1) % n]);
      double low = 0, high = 1.;
      for (int cops = 0; cops < 200; cops++) {
        double pet = (high + 2 * low) / 3., gran = (2 * high + low) / 3;
        pair<double, double> puntpet =
            pair<double, double>(act.first * pet + (1 - pet) * next.first,
                                 act.second * pet + (1 - pet) * next.second);
        pair<double, double> puntgran =
            pair<double, double>(act.first * gran + (1 - gran) * next.first,
                                 act.second * gran + (1 - gran) * next.second);
        if (distsq(puntpet, p) > distsq(puntgran, p))
          low = pet;
        else
          high = gran;
      }
      pair<double, double> punt =
          pair<double, double>(act.first * low + (1 - low) * next.first,
                               act.second * low + (1 - low) * next.second);
      minim = min(minim, distsq(punt, p));
      low = 0, high = 1.;
      for (int cops = 0; cops < 200; cops++) {
        double pet = (high + 2 * low) / 3., gran = (2 * high + low) / 3;
        pair<double, double> puntpet =
            pair<double, double>(act.first * pet + (1 - pet) * next.first,
                                 act.second * pet + (1 - pet) * next.second);
        pair<double, double> puntgran =
            pair<double, double>(act.first * gran + (1 - gran) * next.first,
                                 act.second * gran + (1 - gran) * next.second);
        if (distsq(puntpet, p) < distsq(puntgran, p))
          low = pet;
        else
          high = gran;
      }
      punt = pair<double, double>(act.first * low + (1 - low) * next.first,
                                  act.second * low + (1 - low) * next.second);
      maxim = max(maxim, distsq(punt, p));
    }
    double PI = 3.1415926535897932384626433832795028841971693993751058;
    cout.precision(25);
    cout << fixed << PI * (maxim - minim) << endl;
  }
}
