#include <bits/stdc++.h>
using namespace std;
const double esp = 1e-7;
double dis(double x1, double y1, double x2, double y2) {
  return sqrt((x1 - x2 * 1.0) * (x1 - x2 * 1.0) +
              (y1 - y2 * 1.0) * (y1 - y2 * 1.0));
}
double dis2line(double x, double y, double x1, double y1, double x2,
                double y2) {
  double dbLen1, dbLen2, dbLen3;
  double dbAng, dbAng1, dbAng2;
  dbLen1 = dis(x, y, x1, y1);
  if (dbLen1 < esp) return 0.0;
  dbLen2 = dis(x, y, x2, y2);
  if (dbLen2 < esp) return 0.0;
  dbLen3 = dis(x1, y1, x2, y2);
  if (dbLen3 < esp) return dbLen1;
  if (dbLen1 < dbLen2) {
    if (y1 == y2) {
      if (x1 < x2)
        dbAng1 = 0.0;
      else
        dbAng1 = 3.1415926535897932384626;
    } else {
      dbAng1 = acos((x2 - x1) / dbLen3);
      if (y1 > y2) dbAng1 = 2 * 3.1415926535897932384626 - dbAng1;
    }
    dbAng2 = acos((x - x1) / dbLen1);
    if (y1 > y) dbAng2 = 2 * 3.1415926535897932384626 - dbAng2;
    dbAng = dbAng2 - dbAng1;
    if (dbAng < esp) dbAng = -dbAng;
    if (dbAng > 3.1415926535897932384626)
      dbAng = 2 * 3.1415926535897932384626 - dbAng;
    if (dbAng > 3.1415926535897932384626 / 2)
      return dbLen1;
    else
      return (dbLen1 * sin(dbAng));
  } else {
    if (y1 == y2) {
      if (x1 < x2)
        dbAng1 = 3.1415926535897932384626;
      else
        dbAng1 = 0.0;
    } else {
      dbAng1 = acos((x1 - x2) / dbLen3);
      if (y2 > y1) dbAng1 = 2 * 3.1415926535897932384626 - dbAng1;
    }
    dbAng2 = acos((x - x2) / dbLen2);
    if (y2 > y) dbAng2 = 2 * 3.1415926535897932384626 - dbAng2;
    dbAng = dbAng2 - dbAng1;
    if (dbAng < esp) dbAng = -dbAng;
    if (dbAng > 3.1415926535897932384626)
      dbAng = 2 * 3.1415926535897932384626 - dbAng;
    if (dbAng > 3.1415926535897932384626 / 2)
      return dbLen2;
    else
      return (dbLen2 * sin(dbAng));
  }
}
struct node {
  double x, y;
} p[100000 + 100];
int main() {
  int n;
  double px, py;
  double mindis = -1;
  double maxdis = -1;
  scanf("%d%lf%lf", &n, &px, &py);
  for (int i = 0; i < n; i++) {
    double x, y;
    scanf("%lf%lf", &x, &y);
    p[i].x = x;
    p[i].y = y;
    double dist = dis(p[i].x, p[i].y, px * 1.0, py * 1.0);
    if (maxdis < 0 || dist > maxdis) maxdis = dist;
    if (mindis < 0 || dist < mindis) mindis = dist;
    if (i > 0) {
      dist = dis2line(px * 1.0, py * 1.0, x, y, p[i - 1].x, p[i - 1].y);
      if (maxdis < 0 || dist > maxdis) maxdis = dist;
      if (mindis < 0 || dist < mindis) mindis = dist;
    }
  }
  double dist =
      dis2line(px * 1.0, py * 1.0, p[0].x, p[0].y, p[n - 1].x, p[n - 1].y);
  if (maxdis < 0 || dist > maxdis) maxdis = dist;
  if (mindis < 0 || dist < mindis) mindis = dist;
  printf("%.8lf\n", (maxdis * maxdis * 3.1415926535897932384626 -
                     mindis * mindis * 3.1415926535897932384626));
  return 0;
}
