program eee;

{$APPTYPE CONSOLE}

var
  N, L:integer;
  x,y:array[1..5000] of integer;
  bestsquare:real=0;

procedure DoInput;
var
  i:integer;
begin
  AssignFile(input,'input.txt');
  Reset(input);
  ReadLn(N,L);
  for i:=1 to N do
    begin
      read(x[i], y[i]);
    end;
  closefile(input);  
end;

function can_connect(p1, p2:integer):boolean;
var
  i:integer;
begin
  result:=true;
  for i:=p1+1 to p2-1 do
    if y[i]*(x[p2]-x[p1])<(y[p2]-y[p1])*(x[i]-x[p1]) + y[p1]*(x[p2]-x[p1]) then
      begin
        result:=false;
        break;
      end;
end;

function msqr(x:integer):int64;
begin
  result:=int64(x)*int64(x);
end;

function good_distance(p1, p2:integer):boolean;
begin
  if msqr(x[p2]-x[p1])+msqr(y[p2]-y[p1])<=msqr(L) then
    result:=true
  else
    result:=false;
end;

function min(a,b:real) :real;
begin
  if a<b then min:=a else min:=b;
end;
function max(a,b:real) :real;
begin
  if a>b then max:=a else max:=b;
end;

function trap_sq(x1,y1,x2,y2:integer) : real;
begin
  trap_sq := (x2-x1)*min(y1,y2)+(x2-x1)*abs(y2-y1)/2;
end;

procedure check_square(p1, p2:integer);
var
  square:real;
  i:integer;
begin
// HLUDNEV
square:=0;
  for i:=p1 to p2-1 do
    begin
       square:=square+trap_sq(x[i],y[i], x[i+1],y[i+1]);
    end;
  square:=square - trap_sq(x[p1],y[p1], x[p2],y[p2]);
// HLUDNEV
  if square>bestsquare then
    bestsquare:=square;
end;

procedure solve;
var
  cp, p2:integer;
  stop:boolean;
  lst:array[0..5000] of integer;
  lstn:integer;
  tp:integer;
  i:integer;
begin
  cp:=1;
  while cp<n do
    begin
      p2:=N+1;
      lstn:=0;
      stop:=false;
      while not stop do
        begin
          dec(p2);
          if can_connect(cp, p2) then
            begin
              if not good_distance(cp,p2) then
                begin
                  inc(lstn);
                  lst[lstn]:=p2;
                end
              else
                stop:=true;
            end;
        end;
      check_square(cp, p2);
      for tp:=cp+1 to p2-1 do
        for i:=1 to lstn do
          if can_connect(tp, lst[i]) then
            check_square(tp, lst[i]);  
      if cp=p2 then
        inc(cp)
      else
        cp:=p2;
    end;
end;


procedure dooutput;
begin
  assignfile(output, 'output.txt');
  rewrite(output);
  writeln(bestsquare);
  close(output);
end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  DoInput;
  solve;
  dooutput;
end.
