#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using pii=pair<int,int>;
const int maxn=3e5+5;
ll bit[maxn];
vector<int>pos[maxn];
int l[maxn],r[maxn],a[maxn],p[maxn];
void bit_clear(){
memset(bit,0,sizeof(bit));
}
void add(int x,ll d){
while(x<maxn){
bit[x]+=d;
x+=x&-x;
}
}
ll query(int x){
ll res=0;
while(x){
res+=bit[x];
x-=x&-x;
}
return res;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
int tmp;cin>>tmp;
pos[tmp].push_back(i);
}
for(int i=1;i<=n;i++){
cin>>p[i];
}
int k;cin>>k;
for(int i=1;i<=k;i++){
cin>>l[i]>>r[i]>>a[i];
}
queue<tuple<int,int,vector<int>>>q;
{
vector<int>tmp(n);
iota(tmp.begin(),tmp.end(),1);
q.push({1,k+1,tmp});
}
int ptr=0;
vector<int>ans(n+1);
while(!q.empty()){
auto[low,hi,pool]=q.front();
q.pop();
if(low==hi){
for(int i:pool){
ans[i]=low;
}
continue;
}
int mid=low+(hi-low)/2;
if(mid<ptr){
bit_clear();
ptr=0;
}
while(ptr<mid){
ptr++;
add(l[ptr],a[ptr]);
add(r[ptr]+1,-a[ptr]);
if(l[ptr]>r[ptr]){
add(1,a[ptr]);
}
}
vector<int>sid,bid;
for(int i:pool){
ll need=p[i];
for(int j:pos[i]){
need-=query(j);
if(need<=0)break;
}
if(need<=0)sid.push_back(i);
else bid.push_back(i);
}
if(!sid.empty())q.push({low,mid,sid});
if(!bid.empty())q.push({mid+1,hi,bid});
}
for(int i=1;i<=n;i++){
if(ans[i]==k+1)cout<<"NIE\n";
else cout<<ans[i]<<'\n';
}
}