/*
TASK: colxor
LANG: C
*/

#include <stdio.h>
#include <math.h>

#define MAX 1005
#define INF 12345678

#define SQR(a) ((a) * (a))

#define MINF(a, b) (((a) < (b)) ? (a) : (b))
#define MAXF(a, b) (((a) > (b)) ? (a) : (b))

typedef struct { int x, y; } point;

void input(void);
void solve(void);

double dist(point a, point b);
point  POINT(int x, int y);

int n, r;
point P[MAX];

int min_x, max_x;
int min_y, max_y;

int main(void)
{
  input();
  solve();
  
  return 0;
}

void input(void)
{
  int i;
  
  scanf("%d %d", &n, &r);
  
  min_x = INF; max_x = -INF; 
  min_y = INF; max_y = -INF;
  for(i = 0; i < n; i++) {
    scanf("%d %d", &P[i].x, &P[i].y);
    min_x = MINF(min_x, P[i].x);
    max_x = MAXF(max_x, P[i].x);
    min_y = MINF(min_y, P[i].y);
    max_y = MAXF(max_y, P[i].y);
  }
}

void solve(void)
{
  double d;
  int ans, cnt;
  int i, j, k;
  
  min_x = min_x - (r + 2);
  max_x = max_x + (r + 2);
  min_y = min_y - (r + 2);
  max_y = max_y + (r + 2);
  
  ans = 0;
  for(i = min_x; i <= max_x; i++)
    for(j = min_y; j <= max_y; j++) {
      cnt = 0;
      for(k = 0; k < n; k++) {
        d = 1e99;
        d = MINF(d, dist(POINT(i, j), P[k]));
        d = MINF(d, dist(POINT(i + 1, j), P[k]));
        d = MINF(d, dist(POINT(i, j + 1), P[k]));
        d = MINF(d, dist(POINT(i + 1, j + 1), P[k]));
        if(d < r) cnt++;
      }
      if(cnt % 2) ans++;
    }
    
  printf("%d\n", ans);
}

double dist(point a, point b)
{
  double dx = a.x - b.x;
  double dy = a.y - b.y;
  
  return sqrt(SQR(dx) + SQR(dy));
}

point POINT(int x, int y)
{
  point p;
  
  p.x = x; p.y = y;
  
  return p;
}


