#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.14159265358979323846264338327950288419716939937510,
                  EPS = 1e-9;
const int MAX = 1 << 17;
struct prav {
  long double a, b, c;
};
pair<int, int> sred;
long double Sq(long double x) { return x * x; }
long double Dist(pair<int, int> a, pair<int, int> b) {
  return sqrt(Sq(a.first - b.first) + Sq(a.second - b.second));
}
long double DistPrav(prav p, pair<int, int> toc) {
  return abs(p.a * toc.first + p.b * toc.second + p.c) /
         sqrt((Sq(p.a) + Sq(p.b)));
}
prav Pravac(pair<int, int> a, pair<int, int> b) {
  return prav{
      (long double)b.second - a.second, (long double)a.first - b.first,
      (long double)b.first * a.second - (long double)a.first * b.second};
}
pair<int, int> tocke[MAX];
int main() {
  int n;
  scanf("%d%d%d", &n, &sred.first, &sred.second);
  for (int i = 0; i < n; i++) scanf("%d%d", &tocke[i].first, &tocke[i].second);
  long double minn = 1e15, maxx = -1e15;
  for (int i = 0; i < n; i++) {
    long double dd = Dist(sred, tocke[i]);
    minn = min(minn, dd);
    maxx = max(maxx, dd);
    int slj = (i + 1) % n;
    if (Sq(Dist(tocke[i], tocke[slj])) + Sq(Dist(tocke[i], sred)) + EPS >
            Sq(Dist(tocke[slj], sred)) &&
        Sq(Dist(tocke[i], tocke[slj])) + Sq(Dist(tocke[slj], sred)) + EPS >
            Sq(Dist(tocke[i], sred))) {
      minn = min(minn, DistPrav(Pravac(tocke[i], tocke[slj]), sred));
    }
  }
  printf("%.15lf\n", (double)((Sq(maxx) - Sq(minn)) * PI));
  return 0;
}
