#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool amax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool amin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
double EPS = 0.0000001;
int N;
complex<double> P;
complex<double> V[100010];
double dot(complex<double> a, complex<double> b) {
  return (a.real() * b.real() + a.imag() * b.imag());
}
double cross(complex<double> a, complex<double> b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}
double distance_ls_p(complex<double> a, complex<double> b, complex<double> c) {
  if (dot(b - a, c - a) < EPS) return abs(c - a);
  if (dot(a - b, c - b) < EPS) return abs(c - b);
  return abs(cross(b - a, c - a)) / abs(b - a);
}
int main() {
  int x, y;
  cin >> N >> x >> y;
  P = {(double)x, (double)y};
  double near = 1e13;
  double far = 0;
  for (int i = 0; i < (N); i++) {
    cin >> x >> y;
    V[i] = {(double)x, (double)y};
    near = (near < abs(V[i] - P) ? near : abs(V[i] - P));
    far = (far > abs(V[i] - P) ? far : abs(V[i] - P));
  }
  for (int i = 0; i < (N); i++) {
    int j = (i + 1) % N;
    double d = distance_ls_p(V[i], V[j], P);
    amax(far, d);
    amin(near, d);
  }
  double a = (far * far - near * near) * 3.14159265358979;
  (void)printf("%.10f\n", a);
  return 0;
}
