#include <bits/stdc++.h>
template <typename T>
using Vector2D = std::vector<std::vector<T>>;
template <typename T>
using Vector3D = std::vector<Vector2D<T>>;
using PairInt = std::pair<int, int>;
using PairInt64 = std::pair<int64_t, int64_t>;
using MapInt = std::map<int, int>;
using MMapInt = std::multimap<int, int>;
using MMapInt64 = std::multimap<int64_t, int64_t>;
using UMapIntString = std::unordered_map<int, std::string>;
using SetInt = std::set<int>;
using SetPairInt64 = std::set<PairInt64>;
using VectorInt = std::vector<int>;
using VectorInt2D = Vector2D<int>;
using VectorInt64 = std::vector<int64_t>;
using VectorUInt64 = std::vector<uint64_t>;
using VectorInt642D = Vector2D<int64_t>;
using VectorChar = std::vector<char>;
using VectorChar2D = Vector2D<char>;
using VectorString = std::vector<std::string>;
using QueuePairInt = std::queue<PairInt>;
using QueueInt = std::queue<int>;
using VectorPairInt = std::vector<PairInt>;
using VectorPairInt64 = std::vector<PairInt64>;
using VectorPairInt2D = Vector2D<PairInt>;
using SetInt = std::set<int>;
using MSetInt = std::multiset<int>;
using UMapChar = std::map<char, int>;
using ListInt = std::list<int>;
using VectorListInt = std::vector<ListInt>;
using VectorDouble = std::vector<double>;
double get_dist(int64_t x0, int64_t y0, int64_t x1, int64_t y1) {
  int64_t dx = std::abs(x0 - x1);
  int64_t dy = std::abs(y0 - y1);
  return std::sqrt(static_cast<double>(dx) * dx + dy * dy);
}
double get_h(double a, double b, double c) {
  double p = (a + b + c) / 2;
  double s = (p * (p - a) * (p - b) * (p - c));
  return 2.0 * std::sqrt(s) / a;
}
bool is_angle_gt_90(double a, double b, double c) {
  return a * a > b * b + c * c;
}
int main() {
  std::ios::sync_with_stdio(false);
  int n;
  int64_t x0;
  int64_t y0;
  std::cin >> n >> x0 >> y0;
  int64_t x1;
  int64_t y1;
  std::cin >> x1 >> y1;
  double dist_x1 = get_dist(x0, y0, x1, y1);
  double dist_min = dist_x1;
  double dist_max = dist_x1;
  double dist_prev = dist_x1;
  int64_t x_prev = x1;
  int64_t y_prev = y1;
  for (int i = 1; i < n; ++i) {
    int64_t x;
    int64_t y;
    std::cin >> x >> y;
    double dist = get_dist(x0, y0, x, y);
    double dist_line = get_dist(x, y, x_prev, y_prev);
    if (!is_angle_gt_90(dist, dist_prev, dist_line) &&
        !is_angle_gt_90(dist_prev, dist, dist_line)) {
      dist_min = std::min(dist_min, get_h(dist_line, dist, dist_prev));
    }
    dist_min = std::min(dist_min, dist);
    dist_max = std::max(dist_max, dist);
    dist_prev = dist;
    x_prev = x;
    y_prev = y;
  }
  double dist_line = get_dist(x1, y1, x_prev, y_prev);
  if (!is_angle_gt_90(dist_x1, dist_prev, dist_line) &&
      !is_angle_gt_90(dist_prev, dist_x1, dist_line)) {
    dist_min = std::min(dist_min, get_h(dist_line, dist_x1, dist_prev));
  }
  double pi =
      3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821;
  std::cout.precision(15);
  double s = pi * dist_max * dist_max - pi * dist_min * dist_min;
  std::cout << s;
  return 0;
}
