#include <bits/stdc++.h>
using namespace std;
long double getdist(long double x1, long double y1, long double x2,
                    long double y2) {
  return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
void run() {
  cin.sync_with_stdio(false);
  long long n;
  cin >> n;
  long double x, y;
  cin >> x >> y;
  long double mindist = 1e9;
  long double maxdist = 0;
  long double minx, miny, maxx, maxy;
  long double prevx, prevy, nowx, nowy;
  long double startx, starty;
  cin >> nowx >> nowy;
  startx = nowx;
  starty = nowy;
  if (getdist(x, y, nowx, nowy) >= maxdist) {
    maxdist = getdist(x, y, nowx, nowy);
  }
  if (getdist(x, y, nowx, nowy) <= mindist) {
    mindist = getdist(x, y, nowx, nowy);
  }
  for (int i = 0; i < n; i++) {
    prevx = nowx;
    prevy = nowy;
    cin >> nowx >> nowy;
    if (getdist(x, y, nowx, nowy) >= maxdist) {
      maxdist = getdist(x, y, nowx, nowy);
    }
    if (getdist(x, y, nowx, nowy) <= mindist) {
      mindist = getdist(x, y, nowx, nowy);
    }
    long double d1 = getdist(x, y, nowx, nowy);
    long double d2 = getdist(x, y, prevx, prevy);
    long double d3 = getdist(nowx, nowy, prevx, prevy);
    long double p = (d1 + d2 + d3) / 2;
    long double h = (2 * sqrt(p * (p - d1) * (p - d2) * (p - d3))) / d3;
    if (d1 * d1 + d3 * d3 >= d2 * d2 && d2 * d2 + d3 * d3 >= d1 * d1 &&
        h <= mindist) {
      mindist = h;
    }
  }
  prevx = nowx;
  prevy = nowy;
  nowx = startx;
  nowy = starty;
  if (getdist(x, y, nowx, nowy) >= maxdist) {
    maxdist = getdist(x, y, nowx, nowy);
  }
  if (getdist(x, y, nowx, nowy) <= mindist) {
    mindist = getdist(x, y, nowx, nowy);
  }
  long double d1 = getdist(x, y, nowx, nowy);
  long double d2 = getdist(x, y, prevx, prevy);
  long double d3 = getdist(nowx, nowy, prevx, prevy);
  long double p = (d1 + d2 + d3) / 2;
  long double h = (2 * sqrt(p * (p - d1) * (p - d2) * (p - d3))) / d3;
  if (d1 * d1 + d3 * d3 >= d2 * d2 && d2 * d2 + d3 * d3 >= d1 * d1 &&
      h <= mindist) {
    mindist = h;
  }
  cout << fixed << setprecision(50)
       << maxdist * maxdist * 3.141592653589793238462643383279 -
              mindist * mindist * 3.141592653589793238462643383279;
}
void pre() {
  if (strcmp("", "") != 0) {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
  }
}
void post() {
  fprintf(stderr, "Execution time: %Lf", (long double)clock() / CLOCKS_PER_SEC);
}
int main() {
  pre();
  run();
  post();
  return 0;
}
