#include <bits/stdc++.h>
using namespace std;
int n;
struct node {
  double x, y;
} a[101000], o;
double lenmin = 20000000000, lenmax = 0, ans;
double dis(node a, node b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double get_dis(node a, node b, node c) {
  double alen = dis(b, c);
  double blen = dis(a, c);
  double clen = dis(a, b);
  if (alen * alen + clen * clen <= blen * blen) {
    return alen;
  }
  if (blen * blen + clen * clen <= alen * alen) {
    return blen;
  }
  double s = abs((a.x - c.x) * (b.y - c.y) - (a.y - c.y) * (b.x - c.x));
  return s / clen;
}
void init() {
  cin >> n >> o.x >> o.y;
  for (int i = 0; i < n; i++) {
    cin >> a[i].x >> a[i].y;
    lenmax = max(lenmax, dis(a[i], o));
  }
  for (int i = 0; i < n; i++) {
    int j = (i + 1) % n;
    lenmin = min(lenmin, get_dis(a[i], a[j], o));
  }
  printf("%.10f\n", acos(-1.0) * (lenmax * lenmax - lenmin * lenmin));
}
int main() {
  init();
  return 0;
}
