#include <bits/stdc++.h>
using namespace std;
const int inft = 1000000009;
const int mod = 1000000007;
const int MAXN = 1000006;
long long dist(long long first, long long second) {
  return first * first + second * second;
}
double licz(pair<double, double> A, pair<double, double> B, double m) {
  double first = A.first * m + B.first * (1 - m);
  double second = A.second * m + B.second * (1 - m);
  return first * first + second * second;
}
double ternary(pair<double, double> A, pair<double, double> B) {
  double la1 = 0, la2 = 1;
  for (int i = 0; i < (100); ++i) {
    double mi1 = (2 * la1 + la2) / 3;
    double mi2 = (la1 + 2 * la2) / 3;
    double a1 = licz(A, B, mi1), a2 = licz(A, B, mi2);
    if (a1 < a2)
      la2 = mi2;
    else
      la1 = mi1;
  }
  return licz(A, B, (la1 + la2) / 2);
}
void solve() {
  int n;
  pair<int, int> q;
  scanf("%d%d%d", &n, &q.first, &q.second);
  vector<pair<int, int> > P(n);
  for (int i = 0; i < (n); ++i) scanf("%d%d", &P[i].first, &P[i].second);
  long long mi = 1LL * inft * inft, ma = -1;
  for (pair<int, int> p : P) {
    long long di = dist(p.first - q.first, p.second - q.second);
    mi = min(mi, di);
    ma = max(ma, di);
  }
  double dmi = mi;
  for (int i = 0; i < (n); ++i) {
    pair<int, int> p1 = P[i], p2 = P[(i + 1) % n];
    double best =
        ternary(pair<double, double>(p1.first - q.first, p1.second - q.second),
                pair<double, double>(p2.first - q.first, p2.second - q.second));
    dmi = min(dmi, best);
  }
  printf("%.9lf\n", acos(-1) * (ma - dmi));
}
int main() {
  int te = 1;
  for (int ti = 0; ti < (te); ++ti) solve();
  return 0;
}
