#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<iomanip>#include<string>#include<algorithm>#include<stack>#include<queue>#include<set>#include<vector>#include<map>#define INF 0x3f3f3f3f#define LINF 0x3f3f3f3f3f3f3f3f#define ll long long#define ull unsigned long long#define uint unsigned int#define l(x) ((x)<<1)#define r(x) ((x)<<1|1)#define lowbit(x) ((x)&(-(x)))#define ms(a,b) memset(a,b,sizeof(a))#define NSYNC std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);usingnamespace std;constdouble PI =acos(-1.0);struct point {int x, y;}list[1111];int sta[1111], top;intcross(point p0, point p1, point p2){return(p1.x - p0.x)*(p2.y - p0.y)-(p1.y - p0.y)*(p2.x - p0.x);}doubledis(point p1, point p2){returnsqrt((double)(p2.x - p1.x)*(p2.x - p1.x)+(p2.y - p1.y)*(p2.y - p1.y));}boolcmp(point p1, point p2){int temp =cross(list[0], p1, p2);if(temp >0)returntrue;return temp ==0&&dis(list[0], p1)<dis(list[0], p2);}booltcmp(const point &p1,const point &p2){if(p1.y == p2.y)return p1.x < p2.x;return p1.y < p2.y;}voidinit(int n){for(int i =0; i < n; i++)scanf("%d%d",&list[i].x,&list[i].y);/*sort(list, list + n, [](const point &p1,const point &p2) {
if (p1.y == p2.y)return p1.x < p2.x;
return p2.y < p2.y;
});*/sort(list, list + n, tcmp);sort(list +1, list + n, cmp);}voidgraham(int n){if(n ==1){ top =0; sta[0]=0;}if(n ==2){
top =1;
sta[0]=0;
sta[1]=1;}if(n >2){for(int i =0; i <=1; i++)
sta[i]= i;
top =1;for(int i =2; i < n; i++){while(top >0&&cross(list[sta[top -1]], list[sta[top]], list[i])<=0)
top--;
top++;
sta[top]= i;}}}intmain(){int n, l;while(scanf("%d%d",&n,&l)!=EOF){init(n);graham(n);double res =0;for(int i =0; i < top; i++)
res +=dis(list[sta[i]], list[sta[i +1]]);
res +=dis(list[sta[0]], list[sta[top]]);
res +=2* PI*l;printf("%d\n",(int)(res +0.5));}return0;}