#include <bits/stdc++.h>
using namespace std;
const long double pi = acos(-1.0L);
template <class T>
struct point {
  T x, y;
  point(T x = (T)0, T y = (T)0) : x(x), y(y) {}
  point operator+(const point &p) const { return point(p.x + x, p.y + y); }
  point operator-(const point &p) const { return point(x - p.x, y - p.y); }
  point operator/(const T a) const { return point(x / a, y / a); }
  T operator^(const point &p) const { return x * p.y - y * p.x; }
  T operator*(const point &p) const { return x * p.x + y * p.y; }
  long double norm() { return sqrt((long double)(x * x + y * y)); }
  long double dist(point &p) {
    long long vx = x - p.x;
    long long vy = y - p.y;
    return sqrt((long double)(vx * vx + vy * vy));
  }
};
template <class T>
T square(point<T> &a, point<T> &b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
template <class T>
istream &operator>>(istream &in, point<T> &p) {
  return in >> p.x >> p.y;
}
template <class T>
ostream &operator<<(ostream &out, point<T> &p) {
  return out << p.x << ' ' << p.y;
}
long double c_area(long double r) { return pi * r * r; }
template <class T>
long double dist(point<T> a, point<T> b, point<T> c) {
  if ((c - a) * (b - a) >= 0LL && (c - b) * (a - b) >= 0LL) {
    long double val = (long double)((c - a) ^ (b - a));
    return abs(val / (b - a).norm());
  }
  return min(a.dist(c), b.dist(c));
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n;
  point<long long> P;
  cin >> n >> P;
  long double minsquare = (long long)1e14, maxsquare = 0LL;
  point<long long> anterior;
  point<long long> primero;
  for (int i = 0; i < n; i++) {
    point<long long> nuevo;
    cin >> nuevo;
    long double d1 = P.dist(nuevo);
    if (i == 0) {
      primero = nuevo;
    }
    if (i > 0) d1 = min(d1, dist(nuevo, anterior, P));
    if (i == n - 1) {
      d1 = min(d1, dist(nuevo, primero, P));
    }
    minsquare = min(minsquare, d1);
    maxsquare = max(maxsquare, P.dist(nuevo));
    anterior = nuevo;
  }
  cout << fixed << setprecision(12);
  cout << c_area(maxsquare) - c_area(minsquare) << "\n";
  return 0;
}
