#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <utility>
#include <functional>
#include <sstream>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <climits>

using namespace std;

inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v;}
template<class T> inline string toString(T x) { ostringstream sout; sout << x; return sout.str();}

typedef vector<int> vi;
typedef vector<vi>  vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef long long ll;

#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define REP(i,n) FOR(i,0,n-1)

const double EPS = 1e-10;
const double PI = acos(-1.0);

int main() {
	ll n;
	map<int, ll> field;
	vi jun;

	while(cin >> n, n) {
		field.clear();
		jun.clear();

		int ban;
		ll tan, suu;
		bool flag = true;

		REP(i, n) {
			cin >> ban >> tan >> suu;

			if(!field[ban]) {
				jun.push_back(ban);
			}

			if(field[ban] < 1000000) {
				field[ban] += tan*suu;
			}
		}

		if(jun.size() == 0) {
			cout << "NA" << endl;
		} else {
			REP(i, jun.size()) {
				if(field[jun[i]] >= 1000000) {
					cout << jun[i] << endl;
					flag = false;
				}
			}
			if(flag) {
				cout << "NA" << endl;
			}
		}
	}

	return 0;
}
#include<cstdio>
#include<queue>
#include<algorithm>
#include<functional>
using namespace std;

int flag[301] = {0};

int main(void){
    while(1){
        for(int i = 1;i <= 300;i++){
            flag[i] = 2;
        }
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(a == 0 && b == 0 && c == 0) break;
        vector < pair<pair<int,int> ,pair<int,int> > > v;
        pair<pair<int,int>,pair<int,int> > input;
        int n; scanf("%d",&n);
        for(int i = 0;i < n;i++){
            int x,y,z,w; scanf("%d%d%d%d",&x,&y,&z,&w);
            input.first.first = w;
            input.first.second = x;
            input.second.first = y;
            input.second.second = z;
            v.push_back(input);
        }
        sort(v.begin(),v.end(),greater <pair< pair<int,int>,pair<int,int> > >());
        for(int i = 0;i < n;i++){
            if(v[i].first.first == 1){
                flag[v[i].first.second] = 1;
                flag[v[i].second.first] = 1;
                flag[v[i].second.second] = 1;
            }
            else{
                if(flag[v[i].first.second] == 1 &&
                   flag[v[i].second.first] == 1 &&
                   flag[v[i].second.second] == 2){
                    flag[v[i].second.second] = 0;
                }

                if(flag[v[i].first.second] == 1 &&
                   flag[v[i].second.first] == 2 &&
                   flag[v[i].second.second] == 1){
                    flag[v[i].second.first] = 0;
                }

                if(flag[v[i].first.second] == 2 &&
                   flag[v[i].second.first] == 1 &&
                   flag[v[i].second.second] == 1){
                    flag[v[i].first.second] = 0;
                }
            }
        }
        for(int i = 1;i <= a+b+c;i++){
            printf("%d\n",flag[i]);
        }

    }
    return 0;
}