#include <bits/stdc++.h>
using namespace std;
struct cof {
  long double a, b, c;
  cof(){};
  cof(long double x, long double y, long double z) {
    a = x;
    b = y;
    c = z;
  }
  void input() { cin >> a >> b >> c; }
};
struct Point {
  long double x, y;
  Point(){};
  Point(long double a, long double b) {
    x = a;
    y = b;
  }
  void input() { cin >> x >> y; }
};
struct Vector {
  long double x, y;
  Vector(){};
  Vector(const Point &a, const Point &b) {
    x = b.x - a.x;
    y = b.y - a.y;
  }
  Vector operator+(const Vector &b) {
    return Vector(Point(0, 0), Point(x + b.x, y + b.y));
  }
  long double operator^(const Vector &b) { return x * b.x + y * b.y; }
  long double operator*(const Vector &b) { return x * b.y - y * b.x; }
};
struct line {
  Point a, b;
  line(){};
  line(const Point &x, const Point &y) {
    a = x;
    b = y;
  }
  void input() {
    long double x1, x2, y1, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    a = {x1, y1};
    b = {x2, y2};
  }
};
cof coef(const line &l) {
  return cof(l.b.y - l.a.y, l.a.x - l.b.x,
             (-1) * (l.b.y - l.a.y) * l.a.x - (l.a.x - l.b.x) * l.a.y);
}
cof perpen(const cof &a, const Point &b) {
  Point c(a.a, a.b);
  Point d(-c.y, c.x);
  return cof(d.x, d.y, -(d.x * b.x + d.y * b.y));
}
Point peres(const cof &x, const cof &y) {
  long double n = ((-x.c) * y.b + x.b * y.c) / (x.a * y.b - x.b * y.a);
  long double m = ((-x.a) * y.c + x.c * y.a) / (x.a * y.b - x.b * y.a);
  return Point(n, m);
}
long double rast(const Point &x, const Point &y) {
  return sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y));
}
long double angle(Vector a, Vector b) {
  long double g = atan2(a.y, a.x), h = atan2(b.y, b.x);
  long double x = g - h;
  if (abs(x) > 3.141592653589793238462643383279502884) {
    if (x < 0)
      x += 3.141592653589793238462643383279502884;
    else
      x -= 3.141592653589793238462643383279502884;
  }
  return x;
}
void solve() {
  long long n, x, y, i;
  long double mini, maxi, suma = 0;
  bool flag;
  cin >> n;
  Point first, h, g, p;
  first.input();
  mini = (long double)(1e18);
  maxi = -(long double)(1e18);
  Point mas[n];
  for (i = 0; i < n; ++i) mas[i].input();
  for (i = 0; i < n; ++i) {
    maxi = max(maxi, rast(mas[i], first));
    mini = min(mini, rast(mas[i], first));
  }
  Vector a, b;
  for (i = 0; i < n; ++i) {
    a = Vector(first, mas[i]);
    b = Vector(first, mas[(i + 1) % n]);
    suma += angle(a, b);
  }
  if (abs(suma) > (3.141592653589793238462643383279502884 / 2))
    flag = true;
  else
    flag = false;
  for (i = 0; i < n; ++i) {
    h = mas[i];
    g = mas[(i + 1) % n];
    p = peres(perpen(coef(line(h, g)), first), coef(line(h, g)));
    if ((Vector(h, p) ^ Vector(h, g)) * (Vector(g, p) ^ Vector(h, g)) <= 0) {
      mini = min(mini, rast(first, p));
    }
  }
  if (flag)
    cout << fixed << setprecision(20)
         << 3.141592653589793238462643383279502884 * maxi * maxi << endl;
  else
    cout << fixed << setprecision(20)
         << 3.141592653589793238462643383279502884 * maxi * maxi -
                3.141592653589793238462643383279502884 * mini * mini
         << endl;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
