#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1);
struct Point {
  double x, y;
  Point(double X = 0, double Y = 0) {
    x = X;
    y = Y;
  }
  double dist(Point other) {
    double dx = x - other.x, dy = y - other.y;
    return sqrt(dx * dx + dy * dy);
  }
};
struct Vector {
  double x, y, size;
  Vector(Point a, Point b) {
    x = b.x - a.x;
    y = b.y - a.y;
    size = sqrt(x * x + y * y);
  }
};
double scal(Vector a, Vector b) { return a.x * b.x + a.y * b.y; }
double vec(Vector a, Vector b) { return a.x * b.y - a.y * b.x; }
Vector operator+(Vector a, Vector b) {
  return {Point(0, 0), Point(a.x + b.x, a.y + b.y)};
}
ostream &operator<<(ostream &out, const Point &point) {
  out << "Point(" << point.x << ", " << point.y << ")" << ' ';
  return out;
}
istream &operator>>(istream &in, Point &point) {
  in >> point.x;
  in >> point.y;
  return in;
}
double f(Point a, Point b, Point c) {
  Vector A(b, a), B(b, c), C(c, b), D(c, a);
  if (scal(A, B) < 0) {
    return A.size;
  } else if (scal(C, D) < 0) {
    return D.size;
  } else {
    return abs(vec(A, B)) / B.size;
  }
}
void solve() {
  int n;
  Point P;
  cin >> n >> P;
  Point a, b;
  cin >> a;
  Point fi = a;
  double mn = P.dist(a), mx = P.dist(a);
  for (int i = 0; i < n - 1; i++) {
    cin >> b;
    double d = f(P, a, b);
    mn = min(mn, d);
    mx = max(mx, d);
    mx = max(mx, P.dist(b));
    a = b;
  }
  double d = f(P, fi, b);
  mn = min(mn, d);
  mx = max(mx, d);
  mx = max(mx, P.dist(b));
  a = b;
  cout << pi * (mx * mx - mn * mn);
}
signed main() {
  cout << fixed;
  cout.precision(18);
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solve();
}
