#include <bits/stdc++.h>
using namespace std;
const int maxN = 15e+5;
const double Pi = acos(-1);
const double EPS = 1e-9;
struct Pnt {
  double x, y;
};
struct Line {
  double a, b, c;
  Line() {}
  Line(Pnt p1, Pnt p2) {
    if (p1.x == p2.x) {
      a = 1;
      b = 0;
    } else {
      a = (p1.y - p2.y) / (p2.x - p1.x);
      b = 1;
    }
    c = -(a * p1.x + b * p1.y);
  }
};
int N;
Pnt P0, P[maxN];
double distP(Pnt a, Pnt b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
bool isEqual(double a, double b) { return fabs(a - b) < EPS; }
bool isLessEqual(double a, double b) { return b - a >= -EPS; }
Pnt intersectPoint(Line L1, Line L2) {
  Pnt p;
  p.x = (L1.b * L2.c - L2.b * L1.c) / (L1.a * L2.b - L2.a * L1.b);
  if (isEqual(L1.b, 0))
    p.y = -(L2.a * p.x + L2.c);
  else
    p.y = -(L1.a * p.x + L1.c);
  return p;
}
Line perpendicularLine(Line l, Pnt p) {
  Line pL;
  pL.a = -l.b;
  pL.b = l.a;
  pL.c = -(pL.a * p.x + pL.b * p.y);
  return pL;
}
bool isIn(double p, double a, double b) {
  if (a > b) swap(a, b);
  return (isLessEqual(a, p) && isLessEqual(p, b));
}
bool inSeg(Pnt p, Pnt a, Pnt b) {
  return (isIn(p.x, a.x, b.x) && isIn(p.y, a.y, b.y));
}
double minDist(Pnt p, Pnt a, Pnt b) {
  Line l(a, b);
  Line pl = perpendicularLine(l, p);
  Pnt h = intersectPoint(l, pl);
  if (inSeg(h, a, b)) return distP(h, p);
  return min(distP(p, a), distP(p, b));
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> N >> P0.x >> P0.y;
  double R = 0.0, r = 1e9;
  for (int i = 1; i <= N; ++i) {
    cin >> P[i].x >> P[i].y;
    R = max(R, distP(P0, P[i]));
  }
  P[N + 1] = P[1];
  for (int i = 1; i <= N; ++i) {
    r = min(r, minDist(P0, P[i], P[(i + 1)]));
  }
  long double res = Pi * (R * R - r * r);
  cout << fixed << setprecision(8) << res;
}
