program zC;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type t1=record
        x:integer;
        y:integer;
        end;
     t2=array[1..5000] of t1;
var dPoint:t2;
    N,L,i:integer;

procedure GetData;
  var i:integer;
      F:Text;
begin
  assign(F,'input.txt');
  reset(f);
  read(f,N);
  read(f,L);
  for i:=1 to N do begin
    read(f,dPoint[i].x);
    read(f,dPoint[i].y);
    end;
  close(f);
end;
function FindK(n1,n2:integer):double;
begin
  result:=(dPoint[n2].y-dPoint[n1].y)/(dPoint[n2].x-dPoint[n1].x);
end;

function Fuck_L(n1,n2:integer):boolean;
begin
  if (sqr(dPoint[n2].x-dPoint[n1].x)+
      sqr(dPoint[n2].y-dPoint[n1].y))>L then
      result:=False
    else result:=true;
end;

function FindN(tn:integer):integer;
var K:double;
    HlpN,ii:integer;
begin
  if not(Fuck_L(tn,N)) then begin
    K:=FindK(tn,N);
    HlpN:=N;
    end
   else begin
    HlpN:=0;
    K:=-1000000000000000;
    end;
  for ii:=N-1 downto tn+1 do begin
    if (K<FindK(tn,ii))and(Fuck_L(tn,ii)) then begin
      K:=FindK(tn,ii);
      HlpN:=ii;
      end;
    end;
  if HlpN=tn+1 then Result:=0 else Result:=HlpN;
end;

function Sqwere(n1,n2:integer):double;
  var i:integer;
      sq,k:double;
begin
  sq:=0;
  k:=(dPoint[n2].y-dPoint[n1].y)/(dPoint[n2].x-dPoint[n1].x);
  for i:=n1+1 to n2 do begin
    sq:=sq+
        ((k*(dPoint[i-1].x-dPoint[n1].x)+dPoint[n1].y-
          dPoint[i-1].y)+
         (k*(dPoint[i].x-dPoint[n1].x)+dPoint[n1].y-
          dPoint[i].y))*(dPoint[i].x-dPoint[i-1].x);
    end;
    sq:=sq/2;
    result:=sq;
end;

procedure proces;
begin

end;

begin
  GetData;
  L:=sqr(L);
  write(N:5);
  writeln(L:6);
  for i:=1 to N do begin
    Write(dPoint[i].x:4);
    Writeln(dPoint[i].y:4);
    end;
  writeln(findN(2):4);
  writeln(Sqwere(2,findN(2)):4);
//  proces;
  readln;
end.
