#include<cstdio>
#include<cmath>
#include<algorithm>
#define M -2000000000
using namespace std;
FILE *f=fopen("teren2.in","r");
FILE *g=fopen("teren2.out","w");
struct coord
{
int x,y;
};
coord L[1000001];
double s,arie1,arie2,arie3,arie4,ariemax=M,sumaux;
int n,d;
double det(coord a,int x2,int y2,coord c)
{
return abs( (a.x-c.x)*(y2-c.y)-(a.y-c.y)*(x2-c.x) ) ;
}
void solve()
{
int i;
for(i=1;i<=n;i++)
{
sumaux=s-0.5*det(L[i-1],L[i].x,L[i].y,L[i+1]);
arie1=sumaux+0.5*det(L[i-1],L[i].x+d,L[i].y,L[i+1]);
arie2=sumaux+0.5*det(L[i-1],L[i].x-d,L[i].y,L[i+1]);
arie3=sumaux+0.5*det(L[i-1],L[i].x,L[i].y+d,L[i+1]);
arie4=sumaux+0.5*det(L[i-1],L[i].x,L[i].y-d,L[i+1]);
ariemax=max(ariemax,max(arie1,max(arie2,max(arie3,arie4))));
}
}
int main()
{
int i;
fscanf(f,"%d%d",&n,&d);
for(i=1;i<=n;i++)
{
fscanf(f,"%d%d",&L[i].x,&L[i].y);
}
L[0]=L[n];
L[n+1]=L[1];
for(i=1;i<=n;i++)
s=s+0.5*(L[i].x*L[i+1].y-L[i+1].x*L[i].y);
s=abs(s);
solve();
fprintf(g,"%.6lf",ariemax);
return 0;
}