#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxS=1<<14;
int n,m;
struct Po{
	int x,y,t;
}a[15],b[105];
int lim;
int f[maxS+5][105],g[maxS+5][105];
int disn[maxS+5][15],dism[maxS+5][105];
bool cmp(Po ta,Po tb){ return ta.t<tb.t; }
int dis(Po ta,Po tb){ return abs(ta.x-tb.x)+abs(ta.y-tb.y); }
void prep(){
	lim=1<<n;
	for(int i=0;i<lim;i++){
		for(int j=0;j<n;j++){
			disn[i][j]=1<<30;
			for(int k=0;k<n;k++)
				if(i&(1<<k)) disn[i][j]=min(disn[i][j],dis(a[j],a[k]));
		}
		for(int j=1;j<=m;j++){
			dism[i][j]=1<<30;
			for(int k=0;k<n;k++)
				if(i&(1<<k)) dism[i][j]=min(dism[i][j],dis(b[j],a[k]));
		}
	}
	for(int i=0;i<lim;i++)
		for(int j=0;j<=m;j++)
			f[i][j]=1<<30,g[i][j]=1<<31;
	for(int i=1;i<=m;i++) g[0][i]=1;
	for(int i=0;i<n;i++) f[1<<i][0]=0;
}
int main(){
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++)
		scanf("%d %d",&a[i].x,&a[i].y);
	for(int i=1;i<=m;i++)
		scanf("%d %d %d",&b[i].x,&b[i].y,&b[i].t);
	sort(b+1,b+1+m,cmp);
	prep();
	for(int i=0;i<lim;i++){
		for(int j=0;j<=m;j++){
			if(f[i][j]==1<<30) continue;
			for(int k=1;k<=m;k++)
				if(f[i][j]+dism[i][k]<=b[k].t) g[i][k]=max(g[i][k],j+1);
		}
		for(int j=1;j<=m;j++){
			if(g[i][j]==1<<31) continue;
			for(int k=j+1;k<=m;k++)
				if(b[j].t+min(dism[i][k],dis(b[j],b[k]))<=b[k].t)
					g[i][k]=max(g[i][k],g[i][j]+1);
		}
		for(int k=0;k<n;k++){
			if(i&(1<<k)) continue;
			int to=i|(1<<k);
			for(int j=0;j<=m;j++){
				if(f[i][j]==1<<30) continue;
				f[to][j]=min(f[to][j],f[i][j]+disn[i][k]);
			}
			for(int j=1;j<=m;j++){
				if(g[i][j]==1<<31) continue;
				int t=g[i][j];
				f[to][t]=min(f[to][t],b[j].t+min(dis(a[k],b[j]),disn[i][k]));
			}
		}
	}
	int ans=0;
	for(int i=0;i<lim;i++)
		for(int j=1;j<=m;j++) ans=max(ans,g[i][j]);
	printf("%d\n",ans);
	return 0;
}
