/*
TASK:colxor
LANG:C++
*/

#include <cstdio>
//#include <conio.h>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

#define MN      1024
#define MR      1024
#define MT      (1<<15)

struct event {
    int w;
    int y10,y20;
    int y1,y2;
};

vector<event> v[MT];
char a[1024][1024];
int N,R,D;
int r[MR];

int t1[MT*2];   // chetni
int t2[MT*2];   // nechetni (ocweteni)
int TL,TR;

int is_in(int x1,int y1, int x2,int y2)
{
    int d=(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
    if (d < R*R) return 1;
    return 0;
}

void fill(int i, int l,int r)
{
    if (l==r) { t1[i]=1; return;}
    t1[i]=r-l+1;
    int mid=(l+r)/2;
    fill(2*i, l,mid);
    fill(2*i+1,mid+1,r);
}

void query(int i, int l,int r)
{
    if (TL<=l && r<=TR) {
        swap(t1[i],t2[i]);
        return;
    }
    int mid=(l+r)/2;
    if (TL<=mid) query(2*i, l,mid);
    if (TR>mid) query(2*i+1,mid+1,r);
    
    t1[i]=t1[2*i]+t1[2*i+1];
    t2[i]=t2[2*i]+t2[2*i+1];
}

int main()
{
    //freopen("colxor.in","r",stdin);
    
    scanf("%d%d",&N,&R);
    D=2*R;
    
    //memset(a,1,sizeof(a));
    for (int i=0;i<R;++i) {
        for (int j=0;j<R;++j) {
            if (is_in(0,0,i,j)) {
                r[R-i-1] += 2;
//                printf("%d %d\n",i,j);
            }
        }
    }
    //for (int i=0;i<R;++i) printf("%d\n",r[i]);
    for (int i=0;i<R;++i) r[2*R-i-1]=r[i];
    //for (int i=0;i<2*R;++i) printf("%d\n",r[i]);
    
    
    int x,y;
    event te;
    
    for (int i=0;i<N;++i) {
        scanf("%d%d",&x,&y);
        x+=10000;
        y+=10000;
        
        for (int w=0;w<2*R;++w) {
            int ex=x-R+w;
            te.w=w;
            te.y1=y-r[w]/2;
            te.y2=y+r[w]/2;
            if (w==0) {
                te.y10=0;
                te.y20=0;
            }
            else {
                te.y10=y-r[w-1]/2;
                te.y20=y+r[w-1]/2;
            }
            
            v[ex].push_back(te);
            //printf("%d\n",ex-10000);
        }
    }
    
    fill(1,0,MT-1);
    memset(t2,0,sizeof(t2));
    
    int cnt=0;
    int q=0;

    for (int x=0;x<=20000;++x) {
        for (int i=0;i<v[x].size();++i) {
            if (v[x][i].w != 0) {
                TL=v[x][i].y10;
                TR=v[x][i].y20;
                query(1, 0,MT-1);
                //printf("%d \n",v[x][i].y20-v[x][i].y10+1);
                //printf("maham: %d\n",t2[1]);
            }
            
            TL=v[x][i].y1;
            TR=v[x][i].y2;
            //printf("%d %d %d\n",TL-10000,TR-10000,q);
            query(1, 0,MT-1);
            

            //printf("t2=%d\n",t2[1]);
            //++q;
        }
        
        if (v[x].size())
            cnt += t2[1];
    }

    
    /*
    for (int x=0;x<=20000;++x) {
        for (int i=0;i<v[x].size();++i) {
            if (v[x][i].w != 0) {
                TL=v[x][i].y10;
                TR=v[x][i].y20;
                query(1, 0,MT-1);
                printf("%d \n",v[x][i].y20-v[x][i].y10+1);
                //printf("maham: %d\n",t2[1]);
            }
            printf("%d \n\n",v[x][i].y2-v[x][i].y1+1);
            
            
            TL=v[x][i].y1;
            TR=v[x][i].y2;
            query(1, 0,MT-1);
        }
        if (v[x].size()) {
        //printf("%d\n",t2[1]);
        cnt += t2[1];
        }
        
        //cnt += t2[1];
    }*/
    
    printf("%d\n",cnt);
    //printf("%d\n",v[10001].size());
    
    //getch();
    return 0;
}
