#include <bits/stdc++.h>
const int inf=2e9;
using namespace std;
int T,n,m,p,k,w[16400][120],f[16400][110],g[16400][110];
struct node{
	int x,y,t;
	bool operator <(const node &b)const{
		return t<b.t;
	}
}a[120];
int dis(node a,node b){
	return abs(a.x-b.x)+abs(a.y-b.y);
}
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=n;i<n+m;i++) scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t);
	sort(a+n,a+n+m);
	for(int S=0;S<(1<<n);S++){
		for(int i=0;i<=m;i++) f[S][i]=inf,g[S][i]=-1;
		for(int i=0;i<n+m;i++){
			w[S][i]=2e9;
			for(int j=0;j<n;j++) if((S>>j)&1) w[S][i]=min(w[S][i],dis(a[i],a[j]));
		}
	}
	for(int i=0;i<n;i++) f[1<<i][0]=0;
	for(int j=0;j<m;j++) g[0][j]=1;
	int ans=0;
	for(int S=0;S<(1<<n);S++){
		for(int i=0;i<=m;i++) if(f[S][i]<inf){
			for(int j=0;j<n;j++) if(!((S>>j)&1)) f[S|(1<<j)][i]=min(f[S|(1<<j)][i],w[S][j]+f[S][i]);
			for(int j=0;j<m;j++) if(f[S][i]+w[S][j+n]<=a[j+n].t) g[S][j]=max(g[S][j],i+1);
		}
		for(int i=0;i<m;i++) if(g[S][i]>=0){
			for(int j=0;j<n;j++) if(!((S>>j)&1)) f[S|(1<<j)][g[S][i]]=min(f[S|(1<<j)][g[S][i]],min(dis(a[j],a[i+n]),w[S][j])+a[i+n].t);
			for(int j=i+1;j<m;j++) if(min(dis(a[i+n],a[j+n]),w[S][j+n])+a[i+n].t<=a[j+n].t) g[S][j]=max(g[S][j],g[S][i]+1);
			ans=max(ans,g[S][i]);
		}
	}
	printf("%d\n",ans);
}
