#include <iostream> #include <cstring> #include <cstdio> #include <math.h> #include <cstdlib> #include <algorithm> using namespace std; #define N 1050 #define PI acos(-1.0) int n,r; struct point { int x,y; point(int _x=0,int _y=0) { x=_x; y=_y; } point operator-(point b)const { return point(x-b.x,y-b.y); } }p[N],ch[N]; int cross(point a,point b) { return a.x*b.y-a.y*b.x; } bool cmp(point a,point b) { return a.x==b.x?a.y<b.y:a.x<b.x; } double dist(point a,point b) { return sqrt((double)(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } int convexhull(point *p,int n,point *ch) { sort(p+1,p+1+n,cmp); int m=0; for(int i=1;i<=n;++i) { while(m>1 && cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--; ch[m++]=p[i]; } int k=m; for(int i=n-1;i>=1;--i) { while(m>k && cross(ch[m-1]-ch[m-2],p[i]-ch[m-2])<=0) m--; ch[m++]=p[i]; } if(n>1) m--; return m; } int main () { while(scanf("%d%d",&n,&r)!=EOF) { for(int i=1;i<=n;++i) scanf("%d%d",&p[i].x,&p[i].y); int cnt=convexhull(p,n,ch); double res=0.0; for(int i=0;i<cnt-1;++i) res+=dist(ch[i],ch[i+1]); res+=dist(ch[cnt-1],ch[0]); res+=2*PI*r; printf("%.0lf\n",res); } return 0; }