#include<bits/stdc++.h>
using namespace std;
namespace jyy{
	const int mod=998244353,N=14,M=101;
	const double eps=1e-8;
	#define ll long long
	inline int read(){
		static int x=0,f=1;x=0,f=1;
		static char ch=getchar();
		while(ch<'0'||ch>'9'){(ch=='-')?f*=-1:f;ch=getchar();}
		while(ch>='0'&&ch<='9')x=x*10+int(ch-48),ch=getchar();
		return x*f;
	}
	inline void fw(int x){if(x<0)putchar('-'),x=-x;x>=10?fw(x/10),1:0;putchar(char(x%10+48));}
	int qmo(int x){return x+((x>>31)&mod);}
	int ksm(int x,int y){
		int tmp=1,sum=x;
		while(y){
			if(y&1)tmp=1ll*tmp*sum%mod;
			sum=1ll*sum*sum%mod;
			y>>=1;
		}
		return tmp;
	}
	int inv(int x){return ksm(x,mod-2);}
	int tot,head[N],fa[N];
	struct edge{int to,next;}dat[N*2];
	void add_edge(int x,int y){dat[++tot]=(edge){y,head[x]},head[x]=tot;}
	int find(int x){return fa[x]?fa[x]=find(fa[x]):x;}
	void merge(int x,int y){find(x)!=find(y)?fa[find(x)]=find(y):0;}
}
using namespace jyy;
struct node{
	int x,y,tim;
}tower[N],q[M];
int D(node A,node B){return abs(A.x-B.x)+abs(A.y-B.y);}
bool operator<(node a,node b){
	return a.tim<b.tim;
}
int dis1[1<<N][M],dis2[1<<N][M],f[1<<N][M],g[1<<N][M],n,m;
int main(){
	memset(dis1,63,sizeof(dis1));
	memset(dis2,63,sizeof(dis2));
	cin>>n>>m;
	for(int i=0;i<(1<<n);i++)for(int j=0;j<=m;j++)f[i][j]=2e9,g[i][j]=-1;
	for(int i=1;i<=n;i++)tower[i].x=read(),tower[i].y=read();
	for(int i=1;i<=m;i++)q[i].x=read(),q[i].y=read(),q[i].tim=read();
	sort(q+1,q+1+m);
	for(int i=0;i<(1<<n);i++){
		for(int k=1;k<=n;k++){
			if(!((1<<(k-1))&i))continue;
			for(int j=1;j<=n;j++)dis1[i][j]=min(dis1[i][j],D(tower[k],tower[j]));
			for(int j=1;j<=m;j++)dis2[i][j]=min(dis2[i][j],D(tower[k],q[j]));
		}
	}
	for(int i=1;i<=n;i++)f[(1<<(i-1))][0]=0;
	for(int i=1;i<=m;i++)g[0][i]=1;
	for(int i=0;i<(1<<n);i++){
		for(int j=0;j<=m;j++){
			if(f[i][j]<2e9){
				for(int k=1;k<=n;k++)if(!((1<<(k-1))&i))f[i|(1<<(k-1))][j]=min(f[i|(1<<(k-1))][j],f[i][j]+dis1[i][k]);
				for(int k=j+1;k<=m;k++)if(q[k].tim>=f[i][j]+dis2[i][k])g[i][k]=max(g[i][k],j+1);
			}
			if(g[i][j]!=-1){
				for(int k=1;k<=n;k++)if(!((1<<(k-1))&i))f[i|(1<<(k-1))][g[i][j]]=min(f[i|(1<<(k-1))][g[i][j]],q[j].tim+min(D(q[j],tower[k]),dis1[i][k]));
				for(int k=j+1;k<=m;k++)if(q[k].tim>=q[j].tim+min(D(q[j],q[k]),dis2[i][k]))g[i][k]=max(g[i][k],g[i][j]+1);
			}
		}
	}
	int ans=0;
	for(int i=0;i<(1<<n);i++)for(int j=0;j<=m;j++)if(f[i][j]<2e9)ans=max(ans,j);
	for(int i=0;i<(1<<n);i++)for(int j=1;j<=m;j++)ans=max(ans,g[i][j]);
	cout<<ans;
}
