#include <bits/stdc++.h>
using namespace std;
const int Maxn = 1e5 + 7;
const long double Inf = 1e19 + 9;
const long double pi = 3.1415926535897932384626433832795028841971693993751;
struct point {
  long double x, y;
};
int n;
point p, P[Maxn];
long double operator^(point a, point b) {
  long double d = (a.x - b.x);
  long double D = (a.y - b.y);
  long double ret = d * d + D * D;
  return sqrt(ret);
}
long double operator%(point a, point b) {
  long double d = (a.y - b.y);
  long double D = (a.x - b.x);
  if (D != 0) return d / D;
  return -Inf;
}
point dis(long double a, long double b, long double A, long double B) {
  point ret;
  long double c = (A - a);
  long double C = (B - b);
  ret.x = C / c;
  ret.y = b + ((-a) * ret.x);
  return ret;
}
int main() {
  long double ans1 = 0, ans2 = Inf;
  cin >> n >> p.x >> p.y;
  for (int i = 0; i < n; i++) {
    cin >> P[i].x >> P[i].y;
    ans1 = max(ans1, P[i] ^ p);
    ans2 = min(ans2, P[i] ^ p);
  }
  for (int i = 0; i < n; i++) {
    int l = (i - 1 + n) % n;
    long double a = P[i] % P[l];
    if (a && a != -Inf) {
      long double b = P[i].y - (a * P[i].x);
      long double A = (-1 / a);
      long double B = p.y - (A * p.x);
      point tmp = dis(-A, B, -a, b);
      if (tmp.x < min(P[l].x, P[i].x) || tmp.x > max(P[i].x, P[l].x)) continue;
      if (tmp.y < min(P[l].y, P[i].y) || tmp.y > max(P[i].y, P[l].y)) continue;
      ans2 = min(ans2, tmp ^ p);
    } else if (!a && p.x >= min(P[i].x, P[l].x) && p.x <= max(P[i].x, P[l].x))
      ans2 = min(ans2, abs(p.y - P[i].y));
    else if (a == -Inf && p.y >= min(P[i].y, P[l].y) &&
             p.y <= max(P[i].y, P[l].y))
      ans2 = min(ans2, abs(p.x - P[i].x));
  }
  long double c = ans1 * ans1;
  long double C = ans2 * ans2;
  cout << fixed << setprecision(18) << (c - C) * pi << endl;
  return 0;
}
