#include <bits/stdc++.h>
using namespace std;
const long long M = 500 + 7, mod = 1e9 + 7;
long long n, rootx, rooty;
vector<pair<long long, long long>> v;
long double findis(long long x1, long long y1, long long x2, long long y2) {
  long double d = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
  d = sqrt(d);
  return d;
}
long double finperd(long long i) {
  long long A = v[i].second - v[i + 1].second;
  long long B = v[i + 1].first - v[i].first;
  long long C = v[i].first * v[i + 1].second - v[i].second * v[i + 1].first;
  long long num = A * rootx + B * rooty + C;
  long double deno = A * A + B * B;
  deno = sqrt(deno);
  long double perd = abs(num) / deno;
  return perd;
}
bool ok(long long i) {
  long long x1 = v[i].first, x2 = v[i + 1].first, y1 = v[i].second,
            y2 = v[i + 1].second;
  long double H = findis(rootx, rooty, x1, y1);
  long double B = finperd(i);
  long double P = H * H - B * B;
  long double H1 = findis(rootx, rooty, x2, y2);
  long double P1 = H1 * H1 - B * B;
  P = sqrt(P);
  P1 = sqrt(P1);
  long double d1 = P + P1;
  long double d2 = findis(x1, y1, x2, y2);
  if (abs(d1 - d2) < 1e-10) return 1;
  return 0;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  {
    cin >> n;
    cin >> rootx >> rooty;
    long double mxr = INT_MAX, mir = 0;
    for (long long i = 1; i <= n; i++) {
      long long x, y;
      cin >> x >> y;
      v.push_back({x, y});
      long double d = (rootx - x) * (rootx - x) + (rooty - y) * (rooty - y);
      d = sqrt(d);
      mxr = min(mxr, d);
      mir = max(mir, d);
    }
    v.push_back(v[0]);
    for (long long i = 0; i < n; i++) {
      if (ok(i)) {
        long double r = finperd(i);
        mir = max(mir, r);
        mxr = min(mxr, r);
      }
    }
    long double d =
        3.1415926535897932384 * mir * mir - 3.1415926535897932384 * mxr * mxr;
    cout << setprecision(20) << d << "\n";
  }
  return 0;
}
