#include <bits/stdc++.h>
using namespace std;
const int N = 15, M = 105;
int n, m, xa[N], ya[N], xb[M], yb[M], t[M], lg[1 << N], ans;
int f[1 << N][M], g[1 << N][M], ord[M], dist[1 << N][N], disq[1 << N][M];
int main()
{
	// ios::sync_with_stdio(false);
	cin >> n >> m;
	for(int i = 0; i < n; i++) lg[1 << i] = i;
	for(int i = 0; i < n; i++) cin >> xa[i] >> ya[i];
	for(int i = 0; i < m; i++) cin >> xb[i] >> yb[i] >> t[i];
	for(int i = 0; i < m; i++) ord[i] = i;
	sort(ord, ord + m, [](const int &fir, const int &sec){return t[fir] < t[sec];});
	// for(int i = 0; i < m; i++) printf("[%d] ", ord[i]); puts("");
	memset(dist, 0x3f, sizeof(dist));
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < n; j++) dist[1 << j][i] = abs(xa[i] - xa[j]) + abs(ya[i] - ya[j]);
		for(int S = 3; S < (1 << n); S++) if(S & (S - 1))
		{
			int low = S & -S, j = lg[low];
			dist[S][i] = min(dist[S ^ low][i], abs(xa[i] - xa[j]) + abs(ya[i] - ya[j]));
		}
		// for(int S = 0; S < (1 << n); S++) printf("dist[%d][%d] = %d\n", i,S, dist[S][i]);
	}
	memset(disq, 0x3f, sizeof(disq));
	for(int i = 0; i < m; i++)
	{
		for(int j = 0; j < n; j++) disq[1 << j][i] = abs(xb[i] - xa[j]) + abs(yb[i] - ya[j]);
		for(int S = 3; S < (1 << n); S++) if(S & (S - 1))
		{
			int low = S & -S, j = lg[low];
			disq[S][i] = min(disq[S ^ low][i], abs(xb[i] - xa[j]) + abs(yb[i] - ya[j]));
		}
		// for(int S = 0; S < (1 << n); S++) printf("disq[%d][%d] = %d\n", i,S, disq[S][i]);
	}
	memset(f, 0x3f, sizeof(f));
	memset(g, 0xc0, sizeof(g));
	for(int i = 0; i < n; i++) f[1 << i][0] = 0;
	for(int i = 0; i < m; i++) g[0][i] = 1;
	
	for(int S = 0; S < (1 << n); S++)
	{
/*
¿¼ÂÇÏÖÔÚÏë×öÊ²Ã´ÊÂÇé£¿
1. ÏÖÔÚÔÚËþ£¬È¥À©Õ¹Ò»¸öËþ    f[S][c] + dist(S, k) -> f[S|k][c] 
2. ÏÖÔÚÔÚËþ£¬È¥À©Õ¹Ò»¸öµã 	 c + 1 -> g[S][p] £¨ f[S][c] + dist(S, p) <= t[p]£© 
3. ÏÖÔÚÔÚµã£¬È¥À©Õ¹Ò»¸öËþ	 t[p] + min(dist(p, k), dist(S, k)) -> f[S|k][g[S][ord[p]]] 
4. ÏÖÔÚÔÚµã£¬È¥À©Õ¹Ò»¸öµã	 g[S][p] + 1 -> g[S][q]  £¨ t[p] + min(dist(p, q), dist(S, q)) <= t[q]£© 
*/
		// cout << "S = " << S << endl;
		for(int c = 0; c < m; c++)
		{
			// printf("f[%d][%d] = %d\n", S, c, f[S][c]);
			// cout << "c = " << c << endl;
			for(int k = 0; k < n; k++) if(!(S >> k & 1))
				f[S | (1 << k)][c] = min(f[S | (1 << k)][c], f[S][c] + dist[S][k]);
				// cout << "k = " << k << endl;
			// cout << "#1\n";
			// if(c == 0) printf("> %d %d %d\n", f[1][0], disq[S][ord[0]], t[ord[0]]);
			for(int p = 0; p < m; p++) if(f[S][c] + disq[S][ord[p]] <= t[ord[p]])
				g[S][ord[p]] = max(g[S][ord[p]], c + 1);
				// f[S][g[S][ord[p]]] = min(f[S][g[S][ord[p]]], t[ord[p]]);
		}
		// cout << "1, 2\n";
		for(int p = 0; p < m; p++) if(g[S][ord[p]] != 0xc0c0c0c0)
		{
			// printf("g[%d][%d] = %d\n", S, ord[p], g[S][ord[p]]);
			for(int k = 0; k < n; k++) if(!(S >> k & 1))
				f[S | (1 << k)][g[S][ord[p]]] = min(f[S | (1 << k)][g[S][ord[p]]], t[ord[p]] + min(abs(xa[k] - xb[ord[p]]) + abs(ya[k] - yb[ord[p]]), dist[S][k]));
			for(int q = p + 1; q < m; q++) 
				if(t[ord[p]] + min(abs(xb[ord[p]] - xb[ord[q]]) + abs(yb[ord[p]] - yb[ord[q]]), disq[S][ord[q]]) <= t[ord[q]])
					g[S][ord[q]] = max(g[S][ord[q]], g[S][ord[p]] + 1);
		}
		// cout << "3, 4\n";
	}
	for(int S = 0; S < (1 << n); S++)
		for(int p = 0; p < m; p++) ans = max(ans, g[S][p]);
	cout << ans << endl;
	return 0;	
}