#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
template <class T>
void printImpl(const vector<T>& coll) {
  copy(coll.begin(), coll.end(), ostream_iterator<T>(cout, " "));
  cout << endl;
}
template <class T, int N>
void printImpl(T (&coll)[N]) {
  copy(coll, coll + N, ostream_iterator<T>(cout, " "));
  cout << endl;
}
template <class Key, class Value>
void printImpl(const map<Key, Value>& data) {
  typename map<Key, Value>::const_iterator it;
  for (it = data.begin(); it != data.end(); ++it) {
    cout << it->first << ":" << it->second << endl;
  }
}
template <class T>
void printImpl(const T& data) {
  cout << data << endl;
}
int ss(long long x) {
  if (x > 0) return 1;
  if (x < 0) return -1;
  return 0;
}
void update(double& minR2, long long x1, long long x2, long long y1,
            long long y2) {
  long long A = x2 - x1;
  long long B = y2 - y1;
  long long v1 = A * x1 + B * y1;
  long long v2 = A * x2 + B * y2;
  if (ss(v1) * ss(v2) < 0) {
    long long A = y2 - y1;
    long long B = x1 - x2;
    double C = (y1 - y2) * x1 - (x1 - x2) * y1;
    minR2 = min(minR2, C * C / (A * 1. * A + B * 1. * B));
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int N;
  long long px, py;
  cin >> N >> px >> py;
  vector<long long> x(N), y(N);
  for (int i = 0; i < (N); ++i) {
    cin >> x[i] >> y[i];
    x[i] -= px;
    y[i] -= py;
  }
  long long maxR2 = 0;
  double minR2 = x[0] * x[0] + y[0] * y[0];
  for (int i = 0; i < (N); ++i) {
    maxR2 = max(maxR2, x[i] * x[i] + y[i] * y[i]);
    minR2 = min(minR2, x[i] * 1. * x[i] + y[i] * y[i]);
  }
  for (int i = 0; i < (N - 1); ++i) {
    update(minR2, x[i], x[i + 1], y[i], y[i + 1]);
  }
  update(minR2, x[N - 1], x[0], y[N - 1], y[0]);
  double PI = 3.14159265358979323;
  double res = PI * (maxR2 - minR2);
  cout << fixed << setprecision(12) << res << endl;
  return 0;
}
