#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
#define pb push_back
#define mp make_pair
#define lsb(x) (x&(-x))
#define pii pair<int,int>
#define ss second
#define ff first
#define piii pair<int,pii>
#define debu(x) (cerr << #x << " = "<< x << "\n")
#define debu2(x,y) (cerr << #x << " = "<< x << " " << #y << " = " << y << "\n")
#define debu3(x,y,z) (cerr << #x << " = "<< x << " " << #y << " = " << y << " " << #z << " = " << z<< "\n")
#define bitout(x,y) {\
cerr << #x << " : ";\
for (int justforbits = y; justforbits >=0; justforbits--)cout << (((1 << justforbits) & x)>=1);\
cout << "\n";\
}
#define rangeout(j,rangestart,rangeend) {\
cerr << "outputting " << #j<< ":\n";\
for (int forrang = rangestart; forrang <= rangeend; forrang++)cerr << j[forrang] << " ";\
cerr<<"\n";\
}
#define c1 {cerr << "Checkpoint 1! \n\n";cerr.flush();}
#define c2 {cerr << "Checkpoint 2! \n\n";cerr.flush();}
#define c3 {cerr << "Checkpoint 3! \n\n";cerr.flush();}
#define c4 {cerr << "Checkpoint 4! \n\n";cerr.flush();}
#define vi vector<int>
#define fr(i,x,y) for(int i=x;i<=y;i++)
#define defN 300001
//possibly overflow idk
//GYATT you mixed up n and m omiGYATT
vector<int>fenny(defN,0);
int n,m;
void update(int s, int e, int cn, int pos, int val)
{
while(pos<=m+1)
{
fenny[pos]+=val;
pos+=lsb(pos);
}
}
int query(int s, int e, int cn, int reqs, int reqe)
{
int ans=0;
while(reqe>0)
{
ans+=fenny[reqe];
reqe-=lsb(reqe);
}
return ans;
}
void dofor(piii t6)
{
//debu3(t6.ss.ff,t6.ss.ss,t6.ff);
update(1,m+1,1,t6.ss.ff,t6.ff);
update(1,m+1,1,t6.ss.ss+1,-t6.ff);
}
signed main()
{
int t1,t2,t3,t4;
mt19937_64 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m;
vector<vi>myorbs(n+1);
vector<int>ni(n+1);
fr(i,1,m){cin>>t1;myorbs[t1].pb(i);}
fr(i,1,n){cin>>ni[i];}
int k;cin>>k;
vector<piii>strikes;
fr(i,1,k){cin>>t1>>t2>>t3;strikes.pb(mp(t3,mp(t1,t2)));}
fr(i,0,k-1)
{
piii t6=strikes[i];
if(t6.ss.ff>t6.ss.ss)
{
dofor(mp(t6.ff,mp(t6.ss.ff,m)));
dofor(mp(t6.ff,mp(1,t6.ss.ss)));
}
else dofor(t6);
}
//c2;
vector<bool>ans(n+1,true);
fr(i,1,n)
{
int amt=0;
for(int orbit:myorbs[i])
{
amt+=query(1,m+1,1,1,orbit);
}
//debu3(i,amt,ni[i]);
if(amt<ni[i]){ans[i]=false;}
}
//c3;
int haixu=n;
vector<queue<pii>>mids(k+1);
vector<pii>urs(n+1);
fr(i,1,n){urs[i]=mp(0,k);}
fr(i,1,n){mids[k/2].push(mp(0,i));}
int curr=0;
while(haixu>0)
{
vector<vi>t5(k+1);
fill(fenny.begin(),fenny.end(),0);
for(int i=1;i<=k;i++)
{
piii t6=strikes[i-1];
if(t6.ss.ff>t6.ss.ss)
{
dofor(mp(t6.ff,mp(t6.ss.ff,m)));
dofor(mp(t6.ff,mp(1,t6.ss.ss)));
}
else dofor(t6);
while(!mids[i].empty()&&mids[i].front().ff==curr)
{
int x=mids[i].front().ss;mids[i].pop();
int hi=urs[x].ss,lo=urs[x].ff;
int amt=0;
for(int ii:myorbs[x])
{
amt+=query(1,m+1,1,1,ii);
}
if(amt>=ni[x])
{
hi=i;
}
else
{
lo=i;
}
urs[x]=mp(lo,hi);
if(hi-lo<=1)haixu--;
else
{
mids[(hi+lo)/2].push(mp(curr+1,x));
}
}
}
curr++;
}
//c1;
fr(i,1,n)
{
if(ans[i])cout<<urs[i].ss;
else cout<<"NIE";
cout<<"\n";
}
}