#include <bits/stdc++.h>
using namespace std;
bool eq(double a, double b) {
  if (fabs(a - b) <= 1e-6)
    return true;
  else
    return false;
}
bool neq(double a, double b) {
  if (fabs(a - b) > 1e-6)
    return true;
  else
    return false;
}
bool lt(double a, double b) {
  if (a + 1e-6 < b)
    return true;
  else
    return false;
}
bool le(double a, double b) {
  if (a < b + 1e-6)
    return true;
  else
    return false;
}
bool gt(double a, double b) {
  if (a > b + 1e-6)
    return true;
  else
    return false;
}
bool ge(double a, double b) {
  if (a + 1e-6 > b)
    return true;
  else
    return false;
}
struct line {
  double a, b, c;
};
double dot(pair<double, double>& u, pair<double, double>& w) {
  return u.first * w.first + u.second * w.second;
}
line l2p(pair<double, double>& a, pair<double, double>& b) {
  line l;
  l.a = b.second - a.second;
  l.b = a.first - b.first;
  l.c = -(b.second - a.second) * a.first - (a.first - b.first) * a.second;
  return l;
}
line lperpend(line l, pair<double, double> a) {
  line m;
  m.a = -l.b;
  m.b = l.a;
  m.c = l.b * a.first - l.a * a.second;
  return m;
}
pair<double, double> pfoot(line l, pair<double, double> a) {
  double z = (l.a * a.first + l.b * a.second + l.c) / (l.a * l.a + l.b * l.b);
  pair<double, double> f;
  f.first = a.first - l.a * z;
  f.second = a.second - l.b * z;
  return f;
}
bool inbetween(pair<double, double> c, pair<double, double> a,
               pair<double, double> b) {
  double dotp = (b.first - a.first) * (c.first - a.first) +
                (b.second - a.second) * (c.second - a.second);
  if (lt(dotp, 0)) return false;
  double dist = (b.first - a.first) * (b.first - a.first) +
                (b.second - a.second) * (b.second - a.second);
  return dotp <= dist;
}
double d(pair<double, double> a, pair<double, double> b) {
  double d1 = b.first - a.first;
  double d2 = b.second - a.second;
  return sqrt(d1 * d1 + d2 * d2);
}
double dlp(pair<double, double> a, pair<double, double> c,
           pair<double, double> b) {
  line l = l2p(a, c);
  pair<double, double> z = pfoot(l, b);
  if (inbetween(z, a, c)) return d(b, z);
  return -1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n;
  double dist, r1 = 2e6, r2 = -1;
  cin >> n;
  pair<double, double> g;
  cin >> g.first >> g.second;
  vector<pair<double, double> > v(n);
  for (int i = 0; i < n; i++) {
    cin >> v[i].first >> v[i].second;
    dist = d(v[i], g);
    if (lt(dist, r1)) r1 = dist;
    if (gt(dist, r2)) r2 = dist;
  }
  double k;
  for (int i = 0; i < n; i++) {
    k = dlp(v[i], v[(i + 1) % n], g);
    if (k != -1 && le(k, r1)) r1 = k;
  }
  cout << setprecision(10) << 3.141592653589793 * (r2 * r2 - r1 * r1) << "\n";
}
