#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1), eps = 1e-6;
int n, up_, dn_, c_, s, t;
double r, ans;
pair<double, double> p[100000], up[100001], dn[100001], c[100001], o[100001],
    b[100001];
pair<double, double> operator-(pair<double, double> a, pair<double, double> b) {
  return make_pair(a.first - b.first, a.second - b.second);
}
double Nj(pair<double, double> a, pair<double, double> b) {
  return a.first * b.first + a.second * b.second;
}
double Xj(pair<double, double> a, pair<double, double> b) {
  return a.first * b.second - a.second * b.first;
}
double dis(pair<double, double> a) {
  return sqrt(a.first * a.first + a.second * a.second);
}
void convex() {
  sort(p, p + n);
  up_ = 0;
  dn_ = 0;
  c_ = 0;
  for (int i = 0; i < n; ++i) {
    for (; up_ > 1 && Xj(p[i] - up[up_ - 1], up[up_] - up[up_ - 1]) > -eps;)
      up_--;
    up[++up_] = p[i];
  }
  for (int i = n - 1; i >= 0; --i) {
    for (; dn_ > 1 && Xj(p[i] - dn[dn_ - 1], dn[dn_] - dn[dn_ - 1]) > -eps;)
      dn_--;
    dn[++dn_] = p[i];
  }
  for (int i = 1; i <= up_; ++i) c[++c_] = up[i];
  for (int i = 2; i < dn_; ++i) c[++c_] = dn[i];
}
pair<double, double> calc(pair<double, double> a, pair<double, double> b) {
  pair<double, double> c = b - a;
  c.first /= 2, c.second /= 2;
  double tmp = sqrt(r * r - c.first * c.first - c.second * c.second) / dis(c);
  return make_pair((b.first + a.first) / 2 - c.second * tmp,
                   (b.second + a.second) / 2 + c.first * tmp);
}
bool not_in_circle(pair<double, double> a, pair<double, double> b,
                   pair<double, double> o, pair<double, double> p) {
  return Nj(b - a, p - a) > -eps && dis(p - o) > r;
}
int main() {
  cin >> n >> r;
  if (n == 1) {
    cout << "0.00000" << endl;
    return 0;
  }
  for (int i = 0; i < n; ++i) cin >> p[i].first >> p[i].second;
  convex();
  s = 1;
  t = 0;
  for (int i = 1; i <= c_; ++i) {
    for (; t > 1 && not_in_circle(b[t - 1], b[t], o[t], c[i]);) t--;
    b[++t] = c[i];
    if (t > 1) o[t] = calc(b[t - 1], b[t]);
  }
  for (bool next; next;) {
    next = 0;
    if (t > s + 1 && dis(b[t] - o[s + 1]) > r) s++, next = 1;
    if (t > s + 1 && dis(b[s] - o[t]) > r) t--, next = 1;
  }
  b[++t] = b[s];
  for (; s < t; ++s) {
    pair<double, double> cen = calc(b[s], b[s + 1]);
    double aga = atan2(b[s].second - cen.second, b[s].first - cen.first);
    double agb =
        atan2(b[s + 1].second - cen.second, b[s + 1].first - cen.first);
    if (aga > agb + eps) agb += pi * 2;
    ans += (agb - aga) * r * r - Xj(b[s] - cen, b[s + 1] - cen) +
           Xj(b[s], b[s + 1]);
  }
  cout << fixed << setprecision(4) << ans / 2 << endl;
  return 0;
}
