#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
int _x, _y, x[100010], y[100010];
int n;
double dis(double _x1, double _y1, double _x2, double _y2) {
  double dx = _x1 - _x2, dy = _y1 - _y2;
  return sqrt(dx * dx + dy * dy);
}
int main() {
  while (~scanf("%d", &n)) {
    scanf("%d", &_x);
    scanf("%d", &_y);
    double mins = 1e15, maxs = -1;
    for (int i = 1; i <= n; i++) {
      scanf("%d", &x[i]);
      scanf("%d", &y[i]);
      double dist = dis(x[i], y[i], _x, _y);
      mins = min(mins, dist);
      maxs = max(maxs, dist);
    }
    x[n + 1] = x[1], y[n + 1] = y[1];
    for (int i = 1; i <= n; i++) {
      double k = 0, px = 0, py = 0;
      if (x[i + 1] == x[i])
        px = x[i], py = _y;
      else if (y[i + 1] == y[i])
        px = _x, py = y[i];
      else {
        k = ((double)y[i + 1] - y[i]) / (x[i + 1] - x[i]);
        double k1 = -1;
        k1 /= k;
        px = (k1 * _x - _y - k * x[i] + y[i]) / (k1 - k),
        py = k * (px - x[i]) + y[i];
      }
      double ers = dis(px, py, x[i], y[i]) + dis(px, py, x[i + 1], y[i + 1]) -
                   dis(x[i], y[i], x[i + 1], y[i + 1]);
      if (abs(ers) < eps) {
        double d = dis(px, py, _x, _y);
        mins = min(mins, d);
        maxs = max(maxs, d);
      }
    }
    double ans = M_PI * (maxs * maxs - mins * mins);
    printf("%.20lf\n", ans);
  }
}
