#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <ctime>
#include <queue>
#include <stack>
#include <algorithm>
#include <list>
#include <vector>
#include <set>
#include <map>
#include <iostream>
#include <deque>
#include <complex>
#include <string>
#include <iomanip>
#include <sstream>
#include <bitset>
#include <valarray>
#include <iterator>
#include <assert.h>
using namespace std;
typedef long long int ll;
typedef unsigned int uint;
typedef unsigned char uchar;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

#define REP(i,x) for(int i=0;i<(int)(x);i++)
#define REPS(i,x) for(int i=1;i<=(int)(x);i++)
#define RREP(i,x) for(int i=((int)(x)-1);i>=0;i--)
#define RREPS(i,x) for(int i=((int)(x));i>0;i--)
#define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();i++)
#define RFOR(i,c) for(__typeof((c).rbegin())i=(c).rbegin();i!=(c).rend();i++)
#define ALL(container) (container).begin(), (container).end()
#define RALL(container) (container).rbegin(), (container).rend()
#define SZ(container) ((int)container.size())
#define mp(a,b) make_pair(a, b)
#define UNIQUE(v) v.erase( unique(v.begin(), v.end()), v.end() );

template<class T> bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; }
template<class T> ostream& operator<<(ostream &os, const vector<T> &t) {
FOR(it,t) os << *it << endl; return os;
}
template<class T> ostream& operator<<(ostream &os, const set<T> &t) {
os<<"{"; FOR(it,t) {if(it!=t.begin()) os<<","; os<<*it;} os<<"}"; return os;
}
template<class S, class T> ostream& operator<<(ostream &os, const pair<S,T> &t) { return os<<"("<<t.first<<","<<t.second<<")";}
template<class S, class T> pair<S,T> operator+(const pair<S,T> &s, const pair<S,T> &t){ return pair<S,T>(s.first+t.first, s.second+t.second);}
template<class S, class T> pair<S,T> operator-(const pair<S,T> &s, const pair<S,T> &t){ return pair<S,T>(s.first-t.first, s.second-t.second);}

namespace geom{
	#define X real()
	#define Y imag()
	typedef double R;
	const R INF = 1e8;
	const R EPS = 1e-8;
	const R PI = 3.1415926535897932384626;
	inline int sig(const R &x) { return (abs(x) < EPS ? 0 : x > 0 ? 1 : -1); }
	typedef complex<R> P;
	struct L : public vector<P>{	// line
		L(const P &p1, const P &p2){this->push_back(p1);this->push_back(p2);}
		L(){}
		P dir()const {return at(1) - at(0);}
	};
	struct Se : public L{	// segment
		Se(const P &p1, const P &p2):L(p1, p2){}
		Se(){}
	};
};
using namespace geom;

namespace std{
	bool operator<(const P &a, const P &b){return sig(a.X-b.X) ? a.X < b.X : a.Y < b.Y;}
	istream& operator>>(istream &is, P &p){R x,y;is>>x>>y;p=P(x, y);return is;}
//	ostream& operator<<(ostream &os, const P &p){return os << "circle("<<100+10*p.X<<", "<<100-10*p.Y<<", 2)";}
//	ostream& operator<<(ostream &os, const Se &s){return os << "line("<<100+10*s[0].X<<", "<<100-10*s[0].Y<<", "<<100+10*s[1].X<<", "<<100-10*s[1].Y<<")";}
}

int H, W, U, M, S;
R du, dm, ds;
main(){
	while(cin >> H >> W, H){
		vector<P> h(H);
		REP(i, H) cin >> h[i];
		cin >> U >> M >> S >> du >> dm >> ds;
		du *= PI / 360;
		dm *= PI / 360;
		ds *= PI / 360;
		vector<P> ums(U+M+S);
		REP(i, U+M+S) cin >> ums[i];
		vector<P> w(W);
		REP(i, W){
			R a, r;
			cin >> a >> r;
			w[i] = polar(r, a*PI/180);
		}
		int ma = 1;
		vector<int> ans;
		REP(i, H){
			const P p = h[i];
			int c = 0;
			REP(j, W){
				const P d = w[j];
				if(abs(d) < abs(p) || du < abs(arg(p/d))) continue;
				if([&](){
					REP(k, ums.size()){
						const P q = p - ums[k];
						const R dd = k<U ? du : k<U+M ? dm : ds;
						if(abs(q) < abs(d) && abs(arg(q/d)) < dd) return 0;
					}
					return 1;
				}()) c ++;
			}
			if(c > ma){
				ans.clear();
				ma = c;
			}
			if(c == ma) ans.push_back(i+1);
		}
		if(ans.empty()) cout << "NA" << endl;
		else REP(i, ans.size()) cout << ans[i] << (i+1 == ans.size() ? "\n" : " ");
	}
	return 0;
}

Measured memory_bytes: 1344