#include<iostream> #include<cmath> using namespace std; const double PI=acos(-1.0); int n,l; typedef struct point { double x,y; point(double xx=0,double yy=0):x(xx),y(yy){} }vector; point p[1010],q[1010]; void sort1(point *a,int x,int y,point *t) { int m,u,v,i; if(y-x>1) { m=x+(y-x)/2; u=x,v=m,i=x; sort1(a,x,m,t); sort1(a,m,y,t); while(u<m || v<y) { if(v>=y || (u<m && (a[u].x<a[v].x || (a[u].x==a[v].x && a[u].y<=a[v].y)))) t[i++]=a[u++]; else t[i++]=a[v++]; } for(i=x;i<y;i++) a[i]=t[i]; } } vector operator - (point a,point b) {return vector(a.x-b.x,a.y-b.y);} double cross(vector a,vector b) { return a.x*b.y-a.y*b.x; } int convex(point *a,point *t) { int k,m=0,i; for(i=0;i<n;i++) { while(m>1 && cross(t[m-1]-t[m-2],a[i]-t[m-2])<=0) m--; t[m++]=a[i]; } k=m; for(i=n-1;i>=0;i--) { while(m>k && cross(t[m-1]-t[m-2],a[i]-t[m-2])<=0) m--; t[m++]=a[i]; } if(n>1) m--; return m; } double dot(vector a,vector b) { return a.x*b.x+a.y*b.y; } double length(vector a) { return sqrt(dot(a,a)); } int main() { int i,m; double s; while(cin>>n>>l) { s=0.0; for(i=0;i<n;i++) cin>>p[i].x>>p[i].y; sort1(p,0,n,q); m=convex(p,q); for(i=0;i<m;i++) { s+=length(q[i]-q[(i+1)%m]); } s+=2*PI*l; cout<<(int)(s+0.5)<<endl; } return 0; }