#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 3;
long long x, y;
long long rx, ry;
int n;
pair<long long, long long> P[MAXN];
const long double PI = acos((-1.0L));
long double dist(const pair<long long, long long> &p) {
  return sqrt(
      ((long double)p.first * p.first + (long double)p.second * p.second));
}
long double dist2Line(const pair<long long, long long> &p1,
                      const pair<long long, long long> &p2) {
  long double s = 0;
  long double d1 = dist(p1);
  long double d2 = dist(p2);
  long double d3 =
      sqrt(((long double)(p1.first - p2.first) * (p1.first - p2.first) +
            (long double)(p1.second - p2.second) * (p1.second - p2.second)));
  if (d2 * d2 >= d1 * d1 + d3 * d3) return d1;
  if (d1 * d1 >= d2 * d2 + d3 * d3) return d2;
  long double p = (d1 + d2 + d3) / 2;
  s = sqrt(p * (p - d1) * (p - d2) * (p - d3));
  return min(s * 2 / d3, min(d1, d2));
}
void solve() {
  cin >> n >> rx >> ry;
  long double mi = 1e9, ma = 0;
  long double d;
  for (int i = 0; i < n; ++i) {
    scanf("%I64d %I64d", &P[i].first, &P[i].second);
    P[i].first -= rx;
    P[i].second -= ry;
    ma = max(ma, dist(P[i]));
  }
  rx = ry = 0;
  P[n] = P[0];
  for (int i = 0; i < n; ++i) {
    mi = min(mi, dist2Line(P[i], P[i + 1]));
  }
  long double res = (ma * ma - mi * mi) * PI;
  cout << res;
}
int main() {
  cout << fixed << setprecision(15);
  solve();
  return 0;
}
