#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T a, T b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
template <typename T>
T pow(T a, T b, long long m) {
  T ans = 1;
  while (b > 0) {
    if (b % 2 == 1) ans = (ans * a) % m;
    b /= 2;
    a = (a * a) % m;
  }
  return ans % m;
}
long double dist1(long double x1, long double y1, long double x2,
                  long double y2) {
  return (long double)sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
long double dist2(long double x1, long double y1, long double x2,
                  long double y2, long double x, long double y) {
  long double num = (y2 - y1) * x - (x2 - x1) * y + x2 * y1 - y2 * x1;
  long double den = dist1(x1, y1, x2, y2);
  num = abs(num);
  return (long double)num / den;
}
typedef struct node {
  long double x, y;
} nd;
bool func(long double x1, long double y1, long double x2, long double y2,
          long double x3, long double y3) {
  if (x3 > x1 && x3 > x2 || y3 > y1 && y3 > y2 || y3 < y1 && y3 < y2 ||
      x3 < x1 && x3 < x2)
    return false;
  return true;
}
long double k(long double x1, long double y1, long double x2, long double y2,
              long double x3, long double y3) {
  long double ans = (y2 - y1) * (x3 - x1) - (x2 - x1) * (y3 - y1);
  long double den = (y2 - y1) * (y2 - y1) + (x2 - x1) * (x2 - x1);
  ans /= den;
  return ans;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long n, x, y;
  cin >> n >> x >> y;
  vector<nd> v(n);
  for (long long i = 0; i < n; i++) {
    cin >> v[i].x >> v[i].y;
  }
  long double min1 = LLONG_MAX;
  long double max1 = 0;
  for (long long i = 0; i < n; i++) {
    long double dist = dist1(x, y, v[i].x, v[i].y);
    min1 = min(min1, dist);
    max1 = max(max1, dist);
    long double x1 = v[i].x;
    long double y1 = v[i].y;
    long double x2 = v[(i + 1) % n].x;
    long double y2 = v[(i + 1) % n].y;
    long double st = k(x1, y1, x2, y2, x, y);
    long double x4 = x - st * (y2 - y1);
    long double y4 = y + st * (x2 - x1);
    bool check = func(x1, y1, x2, y2, x4, y4);
    if (check)
      min1 = min(min1, dist2(v[i].x, v[i].y, v[(i + 1) % n].x, v[(i + 1) % n].y,
                             x, y));
  }
  cerr << "max1"
       << ": " << max1 << " | "
       << "min1"
       << ": " << min1 << "\n";
  long double ans = 3.141592653589793 * (max1 * max1 - min1 * min1);
  cout << fixed << setprecision(12) << ans;
  return 0;
}
