- #include <iostream> 
- #include<cmath> 
- using namespace std; 
-   
- int main() { 
- 	// your code goes here 
- 	int n,r; 
-   
- 	scanf("%d %d", &n, &r); 
-   
- 	int loc; 
- 	scanf("%d", &loc); 
-   
- 	int xy[loc+1][2],i,j; 
-   
- 	for(i=0;i<loc; i++){ 
- 		scanf("%d %d" , &xy[i][0], &xy[i][1]); 
- 	} 
-   
- 	int s; 
- 	scanf("%d", &s); 
-   
- 	int xys[s+1][3]; 
-   
- 	for(i=0;i<s;i++){ 
- 		scanf("%d %d %d", &xys[i][0], &xys[i][1], &xys[i][2]); 
- 	} 
-   
- 	// precomputing distances 
-   
- 	float dist[loc+1][s+1]; 
-   
- 	for(i=0; i < loc; i++){ 
- 		for(j=0; j <s; j++){ 
- 			float distx = abs(xys[j][0] - xy[i][0]); 
- 			float disty = abs(xys[j][1] - xy[i][1]); 
-   
- 			float d = (distx*distx) + (disty*disty); 
- 			d = sqrt(d); 
-   
- 			dist[i][j] = d; 
-   
- 		} 
- 	} 
-   
- 	// consider all possible locations 
-   
- 	long int tot = 1<<loc; 
-   
- 	long int ans = 0; 
-   
- 	bool visit[s+1]; 
-   
- 	// lest number with n set bits 
- 	i = 1<<n; 
- 	i -= 1; 
-   
- 	while(i < tot){ 
-   
- 		int calc = 0; 
-   
- 		// check which locations are considered in i 
-   
- 		for(int l =0; l < s; l++) 
- 			visit[l] = 0; 
-   
-   
- 		for(j = 0; j < loc; j++ ){ 
-   
- 			if( (i&(1<<j)) ){ 
- 				// we are considering j'th location 
-   
- 			for(int k = 0; k < s; k++){ 
-   
- 				float d = dist[j][k]; 
-   
- 				if( d <= r && visit[k] == 0){ 
- 				 		calc += xys[k][2]; 
- 						visit[k] = 1; 
- 						//	cout<<k<<" "; 
- 					} 
- 				} 
- 			} 
- 		} 
-   
- 	//	cout<<"Total : "<<calc<<endl; 
- 		if( ans < calc ) 
- 			ans = calc; 
-   
- 		// find the next higher number with same number of set bits 
- 		int right = i&(-i); 
- 		int next = i+right; 
- 		int op = (i^next); 
- 		op = op/right; 
- 		op>>=2; 
- 		i = next|op; 
-   
- 	} 
-   
- 	printf("%d\n",ans); 
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxjbWF0aD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJaW50IG4scjsKCQoJc2NhbmYoIiVkICVkIiwgJm4sICZyKTsKCQoJaW50IGxvYzsKCXNjYW5mKCIlZCIsICZsb2MpOwoKCWludCB4eVtsb2MrMV1bMl0saSxqOwoJCglmb3IoaT0wO2k8bG9jOyBpKyspewoJCXNjYW5mKCIlZCAlZCIgLCAmeHlbaV1bMF0sICZ4eVtpXVsxXSk7Cgl9CgkKCWludCBzOwoJc2NhbmYoIiVkIiwgJnMpOwoKCWludCB4eXNbcysxXVszXTsKCQoJZm9yKGk9MDtpPHM7aSsrKXsKCQlzY2FuZigiJWQgJWQgJWQiLCAmeHlzW2ldWzBdLCAmeHlzW2ldWzFdLCAmeHlzW2ldWzJdKTsKCX0KCQoJLy8gcHJlY29tcHV0aW5nIGRpc3RhbmNlcwoJCglmbG9hdCBkaXN0W2xvYysxXVtzKzFdOwoJCglmb3IoaT0wOyBpIDwgbG9jOyBpKyspewoJCWZvcihqPTA7IGogPHM7IGorKyl7CgkJCWZsb2F0IGRpc3R4ID0gYWJzKHh5c1tqXVswXSAtIHh5W2ldWzBdKTsKCQkJZmxvYXQgZGlzdHkgPSBhYnMoeHlzW2pdWzFdIC0geHlbaV1bMV0pOwoJCQkJCQoJCQlmbG9hdCBkID0gKGRpc3R4KmRpc3R4KSArIChkaXN0eSpkaXN0eSk7CgkJCWQgPSBzcXJ0KGQpOwoJCQkKCQkJZGlzdFtpXVtqXSA9IGQ7CgkJCQkJCgkJfQoJfQoJCgkvLyBjb25zaWRlciBhbGwgcG9zc2libGUgbG9jYXRpb25zCgkKCWxvbmcgaW50IHRvdCA9IDE8PGxvYzsKCQoJbG9uZyBpbnQgYW5zID0gMDsKCQoJYm9vbCB2aXNpdFtzKzFdOwoJCgkvLyBsZXN0IG51bWJlciB3aXRoIG4gc2V0IGJpdHMKCWkgPSAxPDxuOwoJaSAtPSAxOwoJCgl3aGlsZShpIDwgdG90KXsKCQkKCQlpbnQgY2FsYyA9IDA7CgkJCgkJLy8gY2hlY2sgd2hpY2ggbG9jYXRpb25zIGFyZSBjb25zaWRlcmVkIGluIGkKCgkJZm9yKGludCBsID0wOyBsIDwgczsgbCsrKQoJCQl2aXNpdFtsXSA9IDA7CgkJCQkKCQkKCQlmb3IoaiA9IDA7IGogPCBsb2M7IGorKyApewoJCQkKCQkJaWYoIChpJigxPDxqKSkgKXsKCQkJCS8vIHdlIGFyZSBjb25zaWRlcmluZyBqJ3RoIGxvY2F0aW9uCgkJCQkKCQkJZm9yKGludCBrID0gMDsgayA8IHM7IGsrKyl7CgkJCQkJCgkJCQlmbG9hdCBkID0gZGlzdFtqXVtrXTsKCQkJCQoJCQkJaWYoIGQgPD0gciAmJiB2aXNpdFtrXSA9PSAwKXsKCQkJCSAJCWNhbGMgKz0geHlzW2tdWzJdOwoJCQkJCQl2aXNpdFtrXSA9IDE7CgkJCQkJCS8vCWNvdXQ8PGs8PCIgIjsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJCgkvLwljb3V0PDwiVG90YWwgOiAiPDxjYWxjPDxlbmRsOwoJCWlmKCBhbnMgPCBjYWxjICkKCQkJYW5zID0gY2FsYzsKCQkJCgkJLy8gZmluZCB0aGUgbmV4dCBoaWdoZXIgbnVtYmVyIHdpdGggc2FtZSBudW1iZXIgb2Ygc2V0IGJpdHMKCQlpbnQgcmlnaHQgPSBpJigtaSk7CgkJaW50IG5leHQgPSBpK3JpZ2h0OwoJCWludCBvcCA9IChpXm5leHQpOwoJCW9wID0gb3AvcmlnaHQ7CgkJb3A+Pj0yOwoJCWkgPSBuZXh0fG9wOwoJCQoJfQoJCglwcmludGYoIiVkXG4iLGFucyk7CgkKCXJldHVybiAwOwp9