/*
TASK:colxor
LANG:C
*/


#include<stdio.h>
#include<math.h>
#include<string.h>
 int r;
 
 int abs(int a)
 {
  return (a<0)?-a:a;
 }
 
 int minx1=10000,miny1=10000;
 
 struct C{int x,y;}A[1<<10];
 
 char a[2000][2000];
 
 char isitin(int x, int y, int x1, int y1);
 
 long dist(int x1, int y1, int x2, int y2)
 {
  return (long)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
 }
 
 int main()
 {
  memset(a,0,sizeof(a));   
  long br=0;
  int i,n,j,g,minx=10000,miny=10000,maxx=-10000,maxy=-10000;
  scanf("%d %d",&n,&r);
  for(i=0;i<n;i++)
  {
   scanf("%d %d",&A[i].x,&A[i].y);
   if(minx>A[i].x)minx=A[i].x;
    else if(maxx<A[i].x)maxx=A[i].x;
   if(miny>A[i].y)miny=A[i].y;
    else if(maxy<A[i].y)maxy=A[i].y;    
  }
  //if()
  //bool q;
  minx1=abs(minx-r);
  miny1=abs(miny-r);
  for(i=minx-r;i<maxx+r;i++)
   for(j=miny-r;j<maxy+r;j++)
   {
    for(g=0;g<n;g++)
    {
     if(a[i+minx1][j+miny1]){if(isitin(i,j,A[g].x,A[g].y))br--; }
      else if(isitin(i,j,A[g].x,A[g].y))br++;   
    }
   }   
  printf("%d\n",br);  
  scanf("%d",&n);
  return 0;
 }
 
 char isitin(int x, int y, int x1, int y1)
 {
  char w=(a[x+minx1][y+miny1])?0:1;
  if(x<x1){
   if(y<y1){        
    if(dist(x+1,y+1,x1,y1)<r){a[x+minx1][y+miny1]=w; return 1;}      
   }
   else if(dist(x+1,y,x1,y1)<r){a[x+minx1][y+miny1]=w;  return 1;}
  }
  else {
   if(y<y1){        
    if(dist(x,y+1,x1,y1)<r){a[x+minx1][y+miny1]=w; return 1;}
   }
   else if(dist(x,y,x1,y1)<r){a[x+minx1][y+miny1]=w;  return 1;}
  }   
  return 0;
 } 
