#include <bits/stdc++.h>
using namespace std;
const int maxN = 100100;
const long double INF = 1e100;
const long double eps = 1e-6;
const long double PI = 3.14159265358979323846264338328;
long long x[maxN], y[maxN];
long double Dis(long long a, long long b, long long p, long long q) {
  long double aa = 1.0 * a, bb = 1.0 * b, pp = 1.0 * p, qq = 1.0 * q;
  return (aa - pp) * (aa - pp) + (bb - qq) * (bb - qq);
}
long double DfromL(long long X1, long long Y1, long long aa, long long bb,
                   long long pp, long long qq) {
  long double X = 1.0 * X1, Y = 1.0 * Y1, a = 1.0 * aa, b = 1.0 * bb,
              p = 1.0 * pp, q = 1.0 * qq;
  bool Inf = (a == p);
  long double m = (Inf) ? INF : ((b - q) / (a - p));
  long double c = (Inf) ? INF : ((b - m * a));
  bool zero = (!Inf && m == 0.0);
  long double m1 = (Inf) ? (0) : (zero) ? INF : (-1.0 / m);
  long double c1 = (Inf) ? (Y) : (zero) ? INF : (Y - m1 * X);
  long double XX = (Inf) ? (a) : (zero) ? (X) : ((c1 - c) / (m - m1));
  long double YY = (Inf) ? (Y) : (zero) ? (b) : ((m * c1 - m1 * c) / (m - m1));
  if (XX >= min(a, p) && XX <= max(a, p) && YY >= min(b, q) &&
      YY <= max(b, q)) {
    if (Inf) return (X - XX) * (X - XX);
    if (zero) return (Y - YY) * (Y - YY);
    return ((m * X - Y + c) * (m * X - Y + c)) / (1.0 + m * m);
  } else
    return -1.0;
}
int main() {
  ios::sync_with_stdio(false);
  long long n, X, Y;
  cin >> n >> X >> Y;
  for (int i = 0; i < n; i++) cin >> x[i] >> y[i];
  long double maxR = -1.0, minR = INF;
  for (int i = 0; i < n; i++) {
    long double dis = Dis(X, Y, x[i], y[i]);
    maxR = max(maxR, dis);
    minR = min(minR, dis);
    long double diS = DfromL(X, Y, x[i], y[i], x[(i + 1) % n], y[(i + 1) % n]);
    if (diS != -1.0) {
      maxR = max(maxR, diS);
      minR = min(minR, diS);
    }
  }
  long double ans = PI * (maxR - minR);
  cout << setprecision(20) << ans << endl;
  return 0;
}
