#include <bits/stdc++.h>
using namespace std;
template <class T>
void chmin(T& a, const T& b) {
  if (a > b) a = b;
}
template <class T>
void chmax(T& a, const T& b) {
  if (a < b) a = b;
}
int n;
double px, py;
double X[100100], Y[100100];
double ABS(double x) { return (x >= 0) ? x : -x; }
double Angle(double ax, double ay, double bx, double by) {
  double dot = ax * bx + ay * by;
  double sza = sqrt(((ax) * (ax)) + ((ay) * (ay)));
  double szb = sqrt(((bx) * (bx)) + ((by) * (by)));
  double c = (dot / sza) / szb;
  return c;
}
double len(int j) {
  int a = j, b = (j + 1) % n;
  double A = Y[b] - Y[a];
  double B = X[a] - X[b];
  double C = Y[a] * X[b] - X[a] * Y[b];
  double D = ABS(A * px + B * py + C) / sqrt(((A) * (A)) + ((B) * (B)));
  if (Angle(px - X[a], py - Y[a], X[b] - X[a], Y[b] - Y[a]) < 0) return -1.0;
  if (Angle(px - X[b], py - Y[b], X[a] - X[b], Y[a] - Y[b]) < 0) return -1.0;
  return D;
}
double len2(int j) {
  return sqrt(((X[j] - px) * (X[j] - px)) + ((Y[j] - py) * (Y[j] - py)));
}
int main() {
  scanf("%d %lf %lf", &n, &px, &py);
  for (int i = 0; i < n; i++) {
    scanf("%lf %lf", &X[i], &Y[i]);
  }
  double r = 100000000000000.0, R = -1.0;
  for (int i = 0; i < n; i++) {
    double dist = len(i);
    if (dist >= 0) {
      r = min(r, dist);
      R = max(R, dist);
    }
    dist = len2(i);
    r = min(r, dist);
    R = max(R, dist);
  }
  printf("%.16f\n", (((R) * (R)) - ((r) * (r))) * M_PI);
  return 0;
}
