#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100001;
const long double PI = acos(-1);
int a[MAXN + 1], b[MAXN + 1], xp, yp;
struct Vector {
  int x, y;
};
long long mul(Vector a, Vector b) { return 1LL * a.x * b.y - 1LL * b.x * a.y; }
long long sqr(Vector a, Vector b) { return 1LL * a.x * b.x + 1LL * a.y * b.y; }
long long len(Vector a) { return 1LL * a.x * a.x + 1LL * a.y * a.y; }
long long dist(int x1, int y1, int x2, int y2) {
  return 1LL * (x1 - x2) * (x1 - x2) + 1LL * (y1 - y2) * (y1 - y2);
}
long double getMaxDist(int x1, int y1, int x2, int y2) {
  Vector a = {x1 - xp, y1 - yp};
  Vector b = {x2 - xp, y2 - yp};
  if (mul(a, b) > 0) {
    swap(x1, x2);
    swap(y1, y2);
  }
  a = {x1 - xp, y1 - yp};
  b = {x2 - xp, y2 - yp};
  Vector c = {x2 - x1, y2 - y1};
  Vector d = {x1 - x2, y1 - y2};
  long double sq = abs(mul(a, b)) / 2.0;
  if (sqr({-a.x, -a.y}, c) >= 0 && sqr({-b.x, -b.y}, d) >= 0)
    return 4 * sq * sq / dist(x1, y1, x2, y2);
  return min(dist(xp, yp, x1, y1), dist(xp, yp, x2, y2));
}
int main() {
  int n;
  cin >> n >> xp >> yp;
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &a[i], &b[i]);
  }
  long long d2 = 0;
  long double d1 = 1e18;
  for (int i = 0; i < n; i++) {
    if (dist(xp, yp, a[i], b[i]) > d2) {
      d2 = dist(xp, yp, a[i], b[i]);
    }
  }
  for (int i = 0; i < n - 1; i++) {
    d1 = min(d1, getMaxDist(a[i], b[i], a[i + 1], b[i + 1]));
  }
  d1 = min(d1, getMaxDist(a[n - 1], b[n - 1], a[0], b[0]));
  cout << fixed << setprecision(20) << PI * (d2 - d1) << endl;
  return 0;
}
