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

typedef pair<int,int> P;

/* 平面幾何の基本要素 */
 
#define EPS (1e-10)
#define equals(a,b) (fabs((a) - (b)) < EPS )
#define PI 3.141692653589793
 
class Point { // 点を表すクラス
  public:
  double x,y;
   
  Point(double x=0,double y=0): x(x),y(y) {}
   
  Point operator + (Point p) { return Point(x + p.x, y + p.y); }
  Point operator - (Point p) { return Point(x - p.x, y - p.y); }
  Point operator * (double a) { return Point(a * x, a * y); }
  Point operator / (double a) { return Point(x / a, y / a); }
 
  double abs() { return sqrt(norm()); }
  double norm() { return x * x + y * y; }
   
  bool operator < (const Point &p) const {
    return x != p.x ? x < p.x : y < p.y;
  }
 
  bool operator == (const Point &p) const {
    return fabs(x - p.x) < EPS && fabs(y - p.y) < EPS;
  }
};
 
typedef Point Vector; // ベクトルを表す構造体
 
struct Segment { // 線分を表す構造体
  Point p1,p2;
};
 
typedef Segment Line; // 直線を表す構造体
 
class Circle { // 円を表すクラス
public:
  Point c;
  double r;
  Circle(Point c = Point(), double r = 0.0): c(c),r(r) {}
};
typedef vector < Point > Polygon; // 多角形

double dot(Vector a, Vector b) {
  return a.x * b.x + a.y * b.y;
}
 
double cross(Vector a, Vector b) {
  return a.x * b.y - a.y * b.x;
}

int H,R;
Point h[111];
int U,M,S;
double du,dm,ds;
Point u[11],m[11],s[11];
double w[111],a[111];

static const int COUNTER_CLOCKWISE = 1;
static const int CLOCKWISE = -1;
static const int ONLINE_BACK = 2;
static const int ONLINE_FRONT = -2;
static const int ON_SEGMENT = 0;
 
int ccw(Point p0, Point p1, Point p2) {
  Vector a = p1 - p0;
  Vector b = p2 - p0;
 
  if( cross(a,b) > EPS ) return COUNTER_CLOCKWISE;
  if( cross(a,b) < -EPS ) return CLOCKWISE;
  if( dot(a,b) < -EPS ) return ONLINE_BACK;
  if( a.norm() < b.norm() ) return ONLINE_FRONT;
                         
  return ON_SEGMENT;
}

bool judge(Point p,int hn,int wn,double rad){
  double length = sqrt((p.x-h[hn].x)*(p.x-h[hn].x)+(p.y-h[hn].y)*(p.y-h[hn].y));
  if(length > a[wn]) return false;
  Point p1,p2;
  p1.x = a[wn]*cos((w[wn]-rad/2)*PI/180.0)+p.x;
  p1.y = a[wn]*sin((w[wn]-rad/2)*PI/180.0)+p.y;
  p2.x = a[wn]*cos((w[wn]+rad/2)*PI/180.0)+p.x;
  p2.y = a[wn]*sin((w[wn]+rad/2)*PI/180.0)+p.y;
  //cout<<p.x<<" "<<p.y<<" "<<p1.x<<" "<<p1.y<<" "<<p2.x<<" "<<p2.y<<endl;
  //cout << ccw(p,p1,h[hn]) << " " << ccw(p,p2,h[hn]) << endl;
  if(ccw(p,p1,h[hn]) == 1 && ccw(p,p2,h[hn]) == -1) return true;
  return false;
}

int main(){
  while(cin >> H >> R , H){
    for(int i=0;i<H;i++) cin >> h[i].x >> h[i].y;
    cin >> U >> M >> S >> du >> dm >> ds;
    for(int i=0;i<U;i++) cin >> u[i].x >> u[i].y;
    for(int i=0;i<M;i++) cin >> m[i].x >> m[i].y;
    for(int i=0;i<S;i++) cin >> s[i].x >> s[i].y;
    for(int i=0;i<R;i++) cin >> w[i] >> a[i];
    Point T; T.x = 0; T.y = 0;
    P cnt[111];
    for(int i=0;i<111;i++){
      cnt[i].first = 0;
      cnt[i].second = -(i+1);
    }
    for(int i=0;i<H;i++){
      for(int j=0;j<R;j++){
	if(judge(T,i,j,du)){
	  bool flg = true;
	  for(int k=0;k<U;k++){
	    if(judge(u[k],i,j,du)) {
	      flg = false;
	      break;
	    }
	  }
	  if(flg){
	    for(int k=0;k<M;k++){
	      if(judge(m[k],i,j,dm)) {
		flg = false;
		break;
	      }
	    }
	  }
	  if(flg){
	    for(int k=0;k<S;k++){
	      if(judge(s[k],i,j,ds)) {
		flg = false;
		break;
	      }
	    }
	  }
	  if(flg) {
	    cnt[i].first++;
	  }
	}
      }
    }
    sort(cnt,cnt+H,greater<P>() );
    int maxx = cnt[0].first;
    int idx = 0;
    if(cnt[0].first == 0) cout << "NA" << endl;
    else {
      while(maxx == cnt[idx].first){
	cout << -cnt[idx].second;
	if(cnt[idx+1].first == maxx) cout << " ";
	else cout << endl;
	idx++;
      }
    }
  }
}

Measured memory_bytes: 3360