#include <cstdio>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <climits>
#include <cfloat>
using namespace std;

const double PI = acos(-1.0);

class Point
{
public:
    double y, x;
    Point(){
        y = x = 0.0;
    }
    Point(double y0, double x0){
        y = y0;
        x = x0;
    }
    Point operator+(const Point& p) const{
        return Point(y + p.y, x + p.x);
    }
    Point operator-(const Point& p) const{
        return Point(y - p.y, x - p.x);
    }
    Point operator*(double a) const{
        return Point(y * a, x * a);
    }
    Point operator/(double a) const{
        return Point(y / a, x / a);
    }
    double length() const{
        return sqrt(y * y + x * x);
    }
    double dist(const Point& p) const{
        return sqrt(pow(y - p.y, 2) + pow(x - p.x, 2));
    }
    double dot(const Point& p) const{
        return y * p.y + x * p.x; // |a|*|b|*cos慮
    }
    double cross(const Point& p) const{
        return x * p.y - y * p.x; // |a|*|b|*sin慮
    }
};

bool check(Point& h, vector<Point>& t, double angle, double dir, double len)
{
    int m = t.size();

    for(int i=0; i<m; ++i){
        if(h.dist(t[i]) > len)
            continue;

        double theta = atan2(h.y - t[i].y, h.x - t[i].x);
        for(int j=-1; j<=1; ++j){
            if(dir - angle/2 + 2*PI*j < theta && theta < dir + angle/2 + 2*PI*j)
                return true;
        }
    }

    return false;
}

int main()
{
    for(;;){
        int n, r;
        cin >> n >> r;
        if(n == 0)
            return 0;

        vector<Point> h(n);
        for(int i=0; i<n; ++i)
            cin >> h[i].x >> h[i].y;

        vector<int> m(3);
        vector<double> angle(3);
        for(int i=0; i<3; ++i)
            cin >> m[i];
        for(int i=0; i<3; ++i){
            cin >> angle[i];
            angle[i] *= PI / 180;
        }

        vector<vector<Point> > t(3);
        for(int i=0; i<3; ++i){
            t[i].resize(m[i]);
            for(int j=0; j<m[i]; ++j)
                cin >> t[i][j].x >> t[i][j].y;
        }

        vector<double> dir(r), len(r);
        for(int i=0; i<r; ++i){
            cin >> dir[i] >> len[i];
            dir[i] *= PI / 180;
        }

        vector<int> ret;
        int maxDay = 1;
        for(int i=0; i<n; ++i){
            int day = 0;
            for(int j=0; j<r; ++j){
                bool ok = true;
                for(int k=0; k<3; ++k){
                    if(check(h[i], t[k], angle[k], dir[j], len[j]))
                        ok = false;
                }

                vector<Point> my(1, Point(0, 0));
                if(ok && check(h[i], my, angle[0], dir[j], len[j]))
                    ++ day;
            }

            if(day > maxDay){
                ret.assign(1, i+1);
                maxDay = day;
            }else if(day == maxDay){
                ret.push_back(i+1);
            }
        }

        if(ret.empty()){
            cout << "NA" << endl;
        }else{
            cout << ret[0];
            for(unsigned i=1; i<ret.size(); ++i)
                cout << ' ' << ret[i];
            cout << endl;
        }
    }
}

Measured memory_bytes: 1316