#include <bits/stdc++.h>
using namespace std;
const double PI = 3.141592653589793;
const double inf = 1LL << 60;
const double eps = 1E-8;
long long dist(long long x, long long y, long long k, long long l) {
  return (double)(x - k) * (x - k) + (y - l) * (y - l);
}
double dist1(double x, double y, double k, double l) {
  return sqrt((x - k) * (x - k) + (y - l) * (y - l));
}
double shortest_dist(long long p, long long q, long long x1, long long y1,
                     long long x2, long long y2) {
  long long res = abs((y2 - y1) * (p - x1) + (x2 - x1) * y1 - (x2 - x1) * q);
  return (double)res / sqrt(dist(x1, y1, x2, y2));
}
bool check_point(long long p, long long q, long long x1, long long y1,
                 long long x2, long long y2) {
  double x = ((y2 - y1) * (p - x1) + (x2 - x1) * y1 - (x2 - x1) * q) * (-1);
  x /= (dist(x1, y1, x2, y2));
  x *= (y2 - y1);
  x += p;
  double y = ((y2 - y1) * (p - x1) + (x2 - x1) * y1 - (x2 - x1) * q) * (-1);
  y /= (dist(x1, y1, x2, y2));
  y *= (x1 - x2);
  y += q;
  ;
  if (dist1(x1, y1, x, y) + dist1(x2, y2, x, y) - dist1(x1, y1, x2, y2) > eps)
    return false;
  else
    return true;
}
int main() {
  long long n, p, q, k, l, i;
  double max, res, min, dist_1, dist2, dist3;
  vector<pair<long long, long long> > pts;
  cin >> n >> p >> q;
  max = 0.0;
  for (i = 0; i < n; ++i) {
    cin >> k >> l;
    pts.push_back(make_pair(k, l));
    res = dist1(p, q, k, l);
    if (res > max) max = res;
  }
  min = inf;
  for (i = 0; i < n - 1; ++i) {
    dist_1 = shortest_dist(p, q, pts[i].first, pts[i].second, pts[i + 1].first,
                           pts[i + 1].second);
    dist2 = dist1(p, q, pts[i].first, pts[i].second);
    dist3 = dist1(p, q, pts[i + 1].first, pts[i + 1].second);
    if (check_point(p, q, pts[i].first, pts[i].second, pts[i + 1].first,
                    pts[i + 1].second)) {
      if (min > dist_1) min = dist_1;
    } else {
      if (min > dist2) min = dist2;
      if (min > dist3) min = dist3;
    }
  }
  dist_1 = shortest_dist(p, q, pts[n - 1].first, pts[n - 1].second,
                         pts[0].first, pts[0].second);
  dist2 = dist1(p, q, pts[n - 1].first, pts[n - 1].second);
  dist3 = dist1(p, q, pts[0].first, pts[0].second);
  if (check_point(p, q, pts[n - 1].first, pts[n - 1].second, pts[0].first,
                  pts[0].second)) {
    if (min > dist_1) min = dist_1;
  } else {
    if (min > dist2) min = dist2;
    if (min > dist3) min = dist3;
  }
  printf("%.7lf\n", (double)PI * ((max * max) - (min * min)));
  return 0;
}
