#include<bits/stdc++.h>
using namespace std;

struct Tree{
	double x, y, d;
	
	Tree(int xx, int yy, int dd){
		x = xx;
		y = yy;
		d = dd;
	}

	bool isOK(double hx, double hy, double w, double a){
		double l = w - d/2;
		double r = w + d/2;
		l += 360 * 4;
		r += 360 * 4;
		
		double kaku = atan2((hy-y),(hx-x)) * 180/M_PI;
		
		while(l > kaku){
			kaku += 360;
		}
		
		if(r < kaku){
			return false;
		}

		if(a*a >= (hy-y)*(hy-y) + (hx-x) * (hx-x)){
			return true;
		}
		return false;

	}
};

	


int main(){

	int h, r;
	while(cin >> h >> r, h != 0){
		int x[110], y[110];
		for(int i = 0;i < h;i++) cin >> x[i] >> y[i];

		int U, M, S, du, dm, ds;
		cin >> U >> M >> S >> du >> dm >> ds;

		Tree myTree(0, 0, du);
		
		vector<Tree> tree;
		for(int i = 0;i < U;i++){
			int x, y;
			cin >> x >> y;
			tree.push_back(Tree(x, y, du));
		}
		
		for(int i = 0;i < M;i++){
			int x, y;
			cin >> x >> y;
			tree.push_back(Tree(x, y, dm));
		}


		for(int i = 0;i < S;i++){
			int x, y;
			cin >> x >> y;
			tree.push_back(Tree(x, y, ds));
		}
		
		int n = U + M + S;

		int cnt[110] = {};
		
		for(int i = 0;i < r;i++){
			int w, a;
			cin >> w >> a
;			bool flag;
			for(int j = 0;j < h;j++){
				flag = false;
				for(int k = 0;k < n;k++){
					flag = (flag || tree[k].isOK(x[j], y[j], w, a));
				}
				if(!flag && myTree.isOK(x[j], y[j], w, a)){
					cnt[j]++;
				}
			}
		}

		vector<int> ans;
		int ans_num = 0;
		for(int i = 0;i < h;i++){
			if(ans_num < cnt[i]){
				ans.clear();
				ans_num = cnt[i];
				ans.push_back(i+1);
			}else if(ans_num == cnt[i]){
				ans.push_back(i+1);
			}
		}

		if(ans_num == 0){
			cout << "NA" << endl;
		}else{
			for(int i = 0;i < ans.size();i++){
				cout << ans[i];
				if(i < ans.size()-1){
					cout << " ";
				}else{
					cout << endl;
				}
			}
		}
	}

	return 0;

}

