#include <iostream>
#include <vector>
using namespace std;
const int DOWN=1, UP=-1;
const int N=3e5+7;
typedef long long ll;
int n, m, k;
vector<int> o[N];
struct seg{
ll l, r, A;
}s[N];
ll p[N], id[N], ans[N], LL[N], rr[N];
struct TR{
ll tree[N];
int lowbit(int x){
return (x&(-x));
}
void update(int x, ll y){
while(x<=m){
tree[x]+=y;
x+=lowbit(x);
}
}
ll query(int x){
ll sum=0;
while(x){
sum+=tree[x];
x-=lowbit(x);
}
return sum;
}
void add(int l, int r, ll v){
update(l, v);update(r+1, -v);
}
}T;
void meteor(int l, int r, ll mode){
for(int i=l;i<=r;i++){
if(s[i].l<=s[i].r){
T.add(s[i].l, s[i].r, s[i].A*mode);
}else{
T.add(s[i].l, m, s[i].A*mode);
T.add(1, s[i].r, s[i].A*mode);
}
}
}
int check(int L, int R){
int tot1=0, tot2=0;
for(int i=L;i<=R;i++){
ll sum=0;
for(int j=0;j<o[id[i]].size();j++){
sum+=T.query(o[id[i]][j]);
}
if(sum>=p[id[i]])
LL[++tot1]=id[i];
else
rr[++tot2]=id[i];
}
for(int i=1;i<=tot1;i++)
id[L+i-1]=LL[i];
for(int i=1;i<=tot2;i++)
id[L+tot1+i-1]=rr[i];
return tot1;
}
void solve(int l, int r, int L, int R){
if(l>r || L>R) return;
if(l==r){
for(int i=L;i<=R;i++){
ans[id[i]]=l;
}
return;
}
int mid=(l+r)>>1;
meteor(l, mid, DOWN);
int tot1=check(L, R);
solve(mid+1, r, L+tot1, R);
meteor(l, mid, UP);
solve(l, mid, L, L+tot1-1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x;
cin>>x;
o[x].push_back(i);
}
for(int i=1;i<=n;i++){
id[i]=i;
cin>>p[i];
}
cin>>k;
for(int i=1;i<=k;i++){
cin>>s[i].l>>s[i].r>>s[i].A;
}
s[k+1].l=1;s[k+1].r=m;s[k+1].A=1000000000;
solve(1, k+1, 1, n);
for(int i=1;i<=n;i++){
if(ans[i]==k+1)
cout<<"NIE"<<endl;
else
cout<<ans[i]<<endl;
}
return 0;
}