#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const long double INF = 1e18;
const long double PI = acos(-1.0);
int n;
pair<long long, long long> o, origin, p[N];
long long r_1 = 0;
long double r_2 = INF;
long long sqDist(pair<long long, long long> a, pair<long long, long long> b) {
  return (a.first - b.first) * (a.first - b.first) +
         (a.second - b.second) * (a.second - b.second);
}
bool isObtuse(pair<long long, long long> a, pair<long long, long long> b,
              pair<long long, long long> c) {
  long long ab = sqDist(a, b), bc = sqDist(b, c), ca = sqDist(c, a);
  return ab + bc <= ca;
}
long double minDist(pair<long long, long long> a,
                    pair<long long, long long> b) {
  long double diff_x = b.first - a.first, diff_y = b.second - a.second;
  if (diff_x == 0 and diff_y == 0) {
    diff_x = a.first;
    diff_y = a.second;
    return diff_x * diff_x + diff_y * diff_y;
  }
  long double t = (-a.first * diff_x - a.second * diff_y) /
                  (1.0 * diff_x * diff_x + 1.0 * diff_y * diff_y);
  if (t < 0) {
    diff_x = a.first;
    diff_y = a.second;
  } else if (t > 1) {
    diff_x = b.first;
    diff_y = b.second;
  } else {
    diff_x = a.first + t * diff_x;
    diff_y = a.second + t * diff_y;
  }
  return diff_x * diff_x + diff_y * diff_y;
}
int main() {
  origin = pair<long long, long long>(0, 0);
  scanf("%d %lld %lld", &n, &o.first, &o.second);
  for (int i = 0; i < n; ++i) {
    scanf("%lld %lld", &p[i].first, &p[i].second);
    p[i].first -= o.first, p[i].second -= o.second;
    r_1 = max(r_1, sqDist(p[i], origin));
    r_2 = min(r_2, (long double)sqDist(p[i], origin));
  }
  p[n] = p[0];
  for (int i = 0; i < n; ++i) {
    r_2 = min(r_2, minDist(p[i], p[i + 1]));
  }
  long double ans = max((long double)0.0, PI * (r_1 - r_2));
  printf("%0.16f\n", (double)ans);
  return 0;
}
