#include <bits/stdc++.h>
using namespace std;
inline double dist(double a, double b, double c, double d) {
  return (a - c) * (a - c) + (b - d) * (b - d);
}
inline double j(double k1, double b1, double k2, double b2) {
  return (double)(b2 - b1) / (k1 - k2);
}
double dist2(double a, double b, double c1, double d1, double c, double d) {
  if (c == c1) {
    if (b <= d1 && b >= d) {
      return (c - a) * (c - a);
    } else if (b <= d && b >= d1) {
      return (c - a) * (c - a);
    } else {
      return min(dist(a, b, c, d), dist(a, b, c1, d1));
    }
  }
  if (d == d1) {
    if (a <= c1 && a >= c) {
      return (d - b) * (d - b);
    } else if (a <= c && a >= c1) {
      return (d - b) * (d - b);
    } else {
      return min(dist(a, b, c, d), dist(a, b, c1, d1));
    }
  }
  double k1 = ((double)d - d1) / ((double)c - c1);
  double k2 = -1 / k1;
  double b1 = (double)d - (c * k1);
  double b2 = (double)b - (a * k2);
  double x = j(k1, b1, k2, b2);
  if (x > c1 && x > c) {
    return min(dist(a, b, c, d), dist(a, b, c1, d1));
  }
  if (x < c1 && x < c) {
    return min(dist(a, b, c, d), dist(a, b, c1, d1));
  }
  return dist(a, b, x, k1 * x + b1);
}
int main() {
  int n;
  double a, b, c, d, c1, d1, c2, d2, min1, max1;
  cin >> n >> a >> b;
  cin >> c >> d;
  c2 = c;
  d2 = d;
  min1 = max1 = (dist(a, b, c, d));
  for (int i = 2; i <= n; i++) {
    c1 = c;
    d1 = d;
    cin >> c >> d;
    double dis = dist2(a, b, c1, d1, c, d);
    if (min1 > dis) min1 = dis;
    dis = dist(a, b, c, d);
    if (max1 < dis) max1 = dis;
  }
  double dis = dist2(a, b, c2, d2, c, d);
  if (min1 > dis) min1 = dis;
  dis = dist(a, b, c, d);
  if (max1 < dis) max1 = dis;
  cout << setprecision(12) << 3.141592653589793 * (max1 - min1);
}
