func_code_string: #include<iostream>   #include<cstring>   #include<cstdio>   #include<climits>   #include<algorithm>   #include<queue>   #include<vector>   #define int long long   #define pii pair<int,int>   #define mp make_pair   #define pb push_back   #define fi first   #define se second   using namespace std;   inline int read(){    int f=1,ans=0; char c=getchar();    while(c< 0 ||c> 9 ){if(c== - )f=-1;c=getchar();}    while(c>= 0 &&c<= 9 ){ans=ans*10+c- 0 ;c=getchar();}    return f*ans;   }   const int MAXN=15;   const int MAXM=101;   struct node{int x,y,w;}tp[MAXM]; bool cmp(node x1,node x2){return x1.w<x2.w;}   int X[MAXN],Y[MAXN],N,M,f[1<<MAXN][MAXM],INF,g[1<<MAXN][MAXM],Dis[1<<MAXN][MAXN],DIS[1<<MAXN][MAXM],Maxn;   signed main(){    //freopen( 1.in , r ,stdin);    N=read(),M=read(); for(int i=0;i<N;i++) X[i]=read(),Y[i]=read(); for(int i=1;i<=M;i++) tp[i].x=read(),tp[i].y=read(),tp[i].w=read();    sort(tp+1,tp+M+1,cmp);    memset(f,127/3,sizeof(f)); memset(g,-127/3,sizeof(g)); memset(Dis,127/3,sizeof(Dis)); memset(DIS,127/3,sizeof(DIS)); INF=f[0][0];    for(int S=1;S<(1<<N);S++) for(int u=0;u<N;u++){int Minn=INF; for(int v=0;v<N;v++) if(S&(1<<v)) Minn=min(Minn,abs(X[u]-X[v])+abs(Y[u]-Y[v])); Dis[S][u]=Minn;}    for(int S=1;S<(1<<N);S++) for(int u=1;u<=M;u++){int Minn=INF; for(int v=0;v<N;v++) if(S&(1<<v)) Minn=min(Minn,abs(X[v]-tp[u].x)+abs(Y[v]-tp[u].y)); DIS[S][u]=Minn;}    for(int i=0;i<N;i++) f[1<<i][0]=0; for(int i=1;i<=M;i++) g[0][i]=1;    for(int S=0;S<(1<<N);S++){     // f update f     for(int i=0;i<=M;i++) if(f[S][i]!=INF) for(int j=0;j<N;j++) if(!(S&(1<<j)))       f[S|(1<<j)][i]=min(f[S|(1<<j)][i],f[S][i]+Dis[S][j]);     // f update g     for(int i=0;i<=M;i++) if(f[S][i]!=INF) for(int j=1;j<=M;j++) if(f[S][i]+DIS[S][j]<=tp[j].w) g[S][j]=max(g[S][j],i+1);     //g update g     for(int i=1;i<=M;i++) if(g[S][i]>=0){      for(int j=i+1;j<=M;j++) if(tp[i].w+min(abs(tp[i].x-tp[j].x)+abs(tp[i].y-tp[j].y),DIS[S][j])<=tp[j].w)        g[S][j]=max(g[S][j],g[S][i]+1);      Maxn=max(Maxn,g[S][i]);     }     //g update f     for(int i=1;i<=M;i++) if(g[S][i]>=0) for(int j=0;j<N;j++) if(!(S&(1<<j)))       f[S|(1<<j)][g[S][i]]=min(f[S|(1<<j)][g[S][i]],tp[i].w+(min(abs(tp[i].x-X[j])+abs(tp[i].y-Y[j]),Dis[S][j])));    }    printf( %lld n ,Maxn); return 0;    }/*   3 4   1 1   2 3   5 2   2 2 12   5 1 4   6 2 11   3 5 10   */