#include <bits/stdc++.h>
using namespace std;
int MAX(int a, int b) { return (a > b) ? a : b; }
int MIN(int a, int b) { return (a < b) ? a : b; }
int ABS(int x) { return (x > 0) ? x : -x; }
int n;
double px, py, ax[200000], ay[200000];
int main() {
  scanf("%d %lf %lf", &n, &px, &py);
  for (long long int i = 0; i < (long long int)n; i++)
    scanf("%lf %lf", &ax[i], &ay[i]);
  ax[n] = ax[0];
  ay[n] = ay[0];
  double minR = 200000000000000000000.00, maxR = 0.00;
  for (long long int i = 0; i < (long long int)n; i++) {
    double R = hypot(ax[i] - px, ay[i] - py);
    if (R < minR) minR = R;
    if (R > maxR) maxR = R;
  }
  for (long long int i = 0; i < (long long int)n; i++) {
    double a = hypot(ax[i] - px, ay[i] - py),
           b = hypot(ax[i + 1] - px, ay[i + 1] - py),
           c = hypot(ax[i] - ax[i + 1], ay[i] - ay[i + 1]), area;
    double s = (a + b + c) / 2,
           angle1 = acos((a * a + c * c - b * b) / (2 * a * c)),
           angle2 = acos((b * b + c * c - a * a) / (2 * c * b));
    area = sqrt(s * (s - a) * (s - b) * (s - c));
    double temp = area / c * 2;
    if (angle1 > acos(-1) / 2 || angle2 > acos(-1) / 2) continue;
    if (temp < minR) minR = temp;
    if (temp > maxR) maxR = temp;
  }
  printf("%.20lf\n", maxR * maxR * acos(-1) - minR * minR * acos(-1));
}
