#include <bits/stdc++.h>
using namespace std;
long double distanta(long long x1, long long y1, long long x2, long long y2) {
  return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
long double CalcArie(long double dist1, long double dist2, long double dist3) {
  long double p = (dist1 + dist2 + dist3) / 2;
  long double a = sqrt(p * (p - dist1) * (p - dist2) * (p - dist3));
  return a;
}
bool isin(long long px, long long py, long long x1, long long y1, long long x2,
          long long y2) {
  long double a = distanta(x1, y1, x2, y2);
  long double b = distanta(px, py, x1, y1);
  long double c = distanta(px, py, x2, y2);
  if (a > b && a > c) {
    return true;
  }
  if (b < c) {
    swap(b, c);
  }
  if (b * b > c * c + a * a) {
    return false;
  }
  return true;
}
long long n, px, py, xmax, ymax, xmin, ymin, x, y;
long double dist, aria, dist1, dist2, lat, arietriunghi;
long double lmax = 0, lmin = LLONG_MAX;
vector<pair<long long, long long> > puncte;
int main() {
  cin >> n;
  cin >> px >> py;
  for (long long i = 0; i < n; i++) {
    cin >> x >> y;
    puncte.push_back(make_pair(x, y));
    dist = (x - px) * (x - px) + (y - py) * (y - py);
    if (dist > lmax) {
      lmax = dist;
    }
  }
  puncte.push_back(make_pair(puncte[0].first, puncte[0].second));
  for (long long i = 0; i < n; i++) {
    lat = distanta(puncte[i].first, puncte[i].second, puncte[i + 1].first,
                   puncte[i + 1].second);
    dist1 = distanta(px, py, puncte[i].first, puncte[i].second);
    dist2 = distanta(px, py, puncte[i + 1].first, puncte[i + 1].second);
    arietriunghi = CalcArie(lat, dist1, dist2);
    if (isin(px, py, puncte[i].first, puncte[i].second, puncte[i + 1].first,
             puncte[i + 1].second)) {
      dist = 2 * arietriunghi / lat;
    } else {
      dist = min(dist1, dist2);
    }
    if (lmin > dist) {
      lmin = dist;
    }
  }
  aria = (lmax - lmin * lmin) * 3.14159265359;
  ;
  cout << setprecision(20) << aria;
  return 0;
}
