#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int N,L;
int *x,*y;//координаты 
double MaxS=0;//площадь

#define TESTPATH "D:\\Work\\E\\Debug\\"
//#define TESTPATH ""

int findmin(int l,int u,int left)//left=1 если левый минимум и наоборот
{
	if(l>=u)return -1;
	int min=l;
	if(left==1)
	{
		for(int i=l+1;i<=u;i++)
			if(y[i]<y[min])min=i;

	}
	else
	{
		for(int i=l+1;i<=u;i++)
			if(y[i]<=y[min])min=i;
		
	}
	return min;
}

double len(int x1,int y1,int x2,int y2)
{
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

double sq(int l,int u)
{
	double sum=0;
	for(int i=l;i<u;i++)
	{
		sum+=0.5*(x[i+1]-x[i])*(y[i+1]+y[i]);
	}
	sum-=0.5*(x[u]-x[l])*(y[u]+y[l]);
	return sum;
}
//рекурсия
void rec(int l,int u)
{
	if(l>=u||u>N-1||l<0)return;

	int min=findmin(l,u,0);

	int Lmin=findmin(l,min-1,1);

	if(	Lmin+1>=u)
		rec(l,min);
	if(Lmin>-1)
	{
		if(len(x[l],y[l],x[min],y[min])<=(double)L)
		{
			double S=sq(Lmin,min);
			if(S>MaxS)MaxS=S;
			rec(l,Lmin);
		}
		else
		{
			rec(Lmin,min-1);
			rec(Lmin+1,min);
		}
	}
	
	int Rmin=findmin(min+1,u,0);
	if(	Rmin-1<=l)
		rec(min,u);
	if(Rmin>-1)
	{
		if(len(x[min],y[min],x[u],y[u])<=(double)L)
		{
			double S=sq(min,Rmin);
			if(S>MaxS)MaxS=S;
			rec(Rmin,u);
		}
		else
		{
			rec(min,Rmin-1);
			rec(min+1,Rmin);
		}
	}
}
int main(void)
{
	FILE * inf = fopen(TESTPATH"input.txt", "rt");
	FILE * outf = fopen(TESTPATH"output.txt", "wt");
	fscanf(inf,"%d %d",&N,&L);
	x=(int *)malloc(N*sizeof(int));
	y=(int *)malloc(N*sizeof(int));
	for(int i=0;i<N;i++)
	{
		fscanf(inf,"%d %d",&x[i],&y[i]);
	}
//массив готов

	rec(0,N-1);

	fprintf(outf,"%f",MaxS);
	
	fclose(inf);
	fclose(outf);
	return 0;
}