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

typedef struct {
  int x, y;
  int cnt;
} House;

typedef struct {
  int x, y;
  int c;
} Flower;

typedef struct {
  int w;
  double a;
} Wind;

double d[3];

double dist(int x1, int y1, int x2, int y2){
  return fabs(sqrt(pow((double)(x1 - x2), 2.0) + pow((double)(y1 - y2), 2.0)));
}

bool clash(Wind w, House h, Flower f){
  // 距離
  if(dist(h.x, h.y, f.x, f.y) <= w.a){
    double angle;
    if(h.x == f.x && h.y > f.y){
      angle = 90;
    }else if(h.x == f.x && h.y < f.y){
      angle = 270;
    }else if(h.y == f.y && h.x > f.x){
      angle = 0;
    }else if(h.y == f.y && h.x < f.x){
      angle = 180;
    }else{
      double x, y;
      x = (double)(h.x - f.x);
      y = (double)(h.y - f.y);

      angle = atan(fabs(y) / fabs(x));
      angle *= 180 / M_PI; // 度数法へ

      if(x < 0 && y > 0){
	angle = 180 - angle;
      }else if(x < 0 && y < 0){
	angle = 180 + angle;
      }else if(x > 0 && y < 0){
	angle = 360 - angle;
      }
    }

    double up = (double)w.w + d[f.c] / 2;
    double low = (double)w.w - d[f.c] / 2;

    if(up >= 360){
      // 扇形を分割(x軸をまたぐ)
      if(angle <= up - 360 || angle >= low){
	return true;
      }else{
	return false;
      }
    }else if(low <= 0){
      if(angle <= up || angle >= low + 360){
	return true;
      }else{
	return false;
      }
    }else{
      // 扇形を分割する必要がない
      if(low <= angle && angle <= up){
	return true;
      }else{
	return false;
      }
    }
  }else{
    return false;
  }
}

int main(){
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  Flower temp;
  temp.x = 0;
  temp.y = 0;
  temp.c = 0;

  while(1){
    int H, R;
    cin >> H >> R;
    if(H == 0 && R == 0) break;

    House h[105];
    for(int i = 0;i < H;++i){
      cin >> h[i].x >> h[i].y;
      h[i].cnt = 0;
    }
    
    int U, M, S;
    cin >> U >> M >> S >> d[0] >> d[1] >> d[2];
    
    Flower f[35];
    int i, j;
    for(i = 0;i < U;++i){
      cin >> f[i].x >> f[i].y;
      f[i].c = 0;
    }
    for(j = 0;j < M;++j){
      cin >> f[i + j].x >> f[i + j].y;
      f[i + j].c = 1;
    }
    for(int k = 0;k < S;++k){
      cin >> f[i + j + k].x >> f[i + j + k].y;
      f[i + j + k].c = 2;
    }
    
    Wind w;
    for(i = 0;i < R;++i){
      cin >> w.w >> w.a;
      for(int j = 0;j < H;++j){
	bool flag = true;
	for(int k = 0;k < U + M + S && flag;++k){
	  if(/*あたり判定*/clash(w, h[j], f[k])){
	    flag = false;
	  }
	}

	if(flag && /*自分の梅とのあたり判定*/clash(w, h[j], temp)){
	  ++h[j].cnt;
	}
      }
    }

    vector<int> vec;    
    int maxim = 0;
    for(i = 0;i < H;++i){
      if(maxim == h[i].cnt){
	vec.push_back(i + 1);
      }
      else if(maxim < h[i].cnt){
	vec.clear();
	vec.push_back(i + 1);
	maxim = h[i].cnt;
      }
    }
    
    if(maxim == 0){
      cout << "NA" << endl;
    }else{
      for(int i = 0;i < vec.size();++i){
	cout << vec[i];
	
	if(i == vec.size() - 1){
	  cout << endl;
	}else{
	  cout << ' ';
	}
      }
    }

    /*
    cout << "!";
    for(int i = 0;i < H;++i){
      cout << h[i].cnt << ' ';
    }
    cout << endl;
    */

  }

  return 0;
}


