#include<bits/stdc++.h>
#define ll long long
#define pl p<<1
#define pr p<<1|1
using namespace std;
long long read(){
long long x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void write(long long x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
const int N=6e5+10;
int n,m,k,o[N],w[N];
ll p[N];
struct asdf{
int l,r;
ll a;
}s[N];
vector<int>e[N];
int q[N],t,ql[N],tl,qr[N],tr;
struct tree{
int l,r;
ll sum,tag;
}g[N<<2];
void pushup(int p){
g[p].sum=g[pl].sum+g[pr].sum;
}
void pushdown(int p){
g[pl].sum+=(g[pl].r-g[pl].l+1)*g[p].tag;
g[pl].tag+=g[p].tag;
g[pr].sum+=(g[pr].r-g[pr].l+1)*g[p].tag;
g[pr].tag+=g[p].tag;
g[p].tag=0;
}
void build(int p,int l,int r){
g[p].l=l;g[p].r=r;
if(l==r){
g[p].sum=g[p].tag=0;
return;
}
int mid=(l+r)>>1;
build(pl,l,mid);build(pr,mid+1,r);
pushup(p);
}
void add(int p,int l,int r,long long v){
if(l<=g[p].l&&g[p].r<=r){
g[p].tag+=v;
g[p].sum+=(g[p].r-g[p].l+1)*v;
return;
}
int mid=(g[p].l+g[p].r)>>1;
pushdown(p);
if(l<=mid)
add(pl,l,r,v);
if(r>mid)
add(pr,l,r,v);
pushup(p);
}
ll ask(int p,int l,int r){
if(l<=g[p].l&&g[p].r<=r)
return g[p].sum;
int mid=(g[p].l+g[p].r)>>1;
pushdown(p);
ll ans=0;
if(l<=mid)
ans+=ask(pl,l,r);
if(r>mid)
ans+=ask(pr,l,r);
return ans;
}
void solve(int l1,int r1,int l2,int r2){
if(l2>r2||l1>r1)
return;
if(l2==r2){
for(int i=l1;i<=r1;i++)
w[q[i]]=l2;
return;
}
int mid=(l2+r2)>>1;
tl=tr=0;
for(int i=l2;i<=mid;i++)
add(1,s[i].l,s[i].r,s[i].a);
for(int i=l1;i<=r1;i++){
ll sum=0;
for(int j=0;j<e[q[i]].size();j++)
sum+=ask(1,e[q[i]][j],e[q[i]][j]);
if(sum>=p[q[i]])
ql[++tl]=q[i];
else
qr[++tr]=q[i],p[q[i]]-=sum;
}
for(int i=1;i<=tl;i++)
q[l1+i-1]=ql[i];
for(int i=1;i<=tr;i++)
q[l1+tl+i-1]=qr[i];
for(int i=l2;i<=mid;i++)
add(1,s[i].l,s[i].r,-s[i].a);
solve(l1,l1+tl-1,l2,mid);
solve(l1+tl,r1,mid+1,r2);
}
int main(){
n=read();m=read();
build(1,1,2*m-1);
for(int i=1;i<=m;i++){
o[i]=read();
e[o[i]].push_back(i);
if(i!=m)
e[o[i]].push_back(i+m);
}
for(int i=1;i<=n;i++)
p[i]=read(),q[++t]=i;
k=read();
for(int i=1;i<=k;i++){
s[i].l=read();s[i].r=read();s[i].a=read();
if(s[i].r<s[i].l)
s[i].r+=m;
}
s[++k].l=1;s[k].r=m;
s[k].a=1e9;
solve(1,t,1,k);
for(int i=1;i<=n;i++){
if(w[i]<k){
write(w[i]);
puts("");
}
else
puts("NIE");
}
return 0;
}
#include<bits/stdc++.h>
#define ll long long
#define pl p<<1
#define pr p<<1|1
using namespace std;
long long read(){
long long x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void write(long long x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
const int N=6e5+10;
int n,m,k,o[N],w[N];
ll p[N];
struct asdf{
int l,r;
ll a;
}s[N];
vector<int>e[N];
int q[N],t,ql[N],tl,qr[N],tr;
struct tree{
int l,r;
ll sum,tag;
}g[N<<2];
void pushup(int p){
g[p].sum=g[pl].sum+g[pr].sum;
}
void pushdown(int p){
g[pl].sum+=(g[pl].r-g[pl].l+1)*g[p].tag;
g[pl].tag+=g[p].tag;
g[pr].sum+=(g[pr].r-g[pr].l+1)*g[p].tag;
g[pr].tag+=g[p].tag;
g[p].tag=0;
}
void build(int p,int l,int r){
g[p].l=l;g[p].r=r;
if(l==r){
g[p].sum=g[p].tag=0;
return;
}
int mid=(l+r)>>1;
build(pl,l,mid);build(pr,mid+1,r);
pushup(p);
}
void add(int p,int l,int r,long long v){
if(l<=g[p].l&&g[p].r<=r){
g[p].tag+=v;
g[p].sum+=(g[p].r-g[p].l+1)*v;
return;
}
int mid=(g[p].l+g[p].r)>>1;
pushdown(p);
if(l<=mid)
add(pl,l,r,v);
if(r>mid)
add(pr,l,r,v);
pushup(p);
}
ll ask(int p,int l,int r){
if(l<=g[p].l&&g[p].r<=r)
return g[p].sum;
int mid=(g[p].l+g[p].r)>>1;
pushdown(p);
ll ans=0;
if(l<=mid)
ans+=ask(pl,l,r);
if(r>mid)
ans+=ask(pr,l,r);
return ans;
}
void solve(int l1,int r1,int l2,int r2){
if(l2>r2||l1>r1)
return;
if(l2==r2){
for(int i=l1;i<=r1;i++)
w[q[i]]=l2;
return;
}
int mid=(l2+r2)>>1;
tl=tr=0;
for(int i=l2;i<=mid;i++)
add(1,s[i].l,s[i].r,s[i].a);
for(int i=l1;i<=r1;i++){
ll sum=0;
for(int j=0;j<e[q[i]].size();j++)
sum+=ask(1,e[q[i]][j],e[q[i]][j]);
if(sum>=p[q[i]])
ql[++tl]=q[i];
else
qr[++tr]=q[i],p[q[i]]-=sum;
}
for(int i=1;i<=tl;i++)
q[l1+i-1]=ql[i];
for(int i=1;i<=tr;i++)
q[l1+tl+i-1]=qr[i];
for(int i=l2;i<=mid;i++)
add(1,s[i].l,s[i].r,-s[i].a);
solve(l1,l1+tl-1,l2,mid);
solve(l1+tl,r1,mid+1,r2);
}
int main(){
n=read();m=read();
build(1,1,2*m-1);
for(int i=1;i<=m;i++){
o[i]=read();
e[o[i]].push_back(i);
if(i!=m)
e[o[i]].push_back(i+m);
}
for(int i=1;i<=n;i++)
p[i]=read(),q[++t]=i;
k=read();
for(int i=1;i<=k;i++){
s[i].l=read();s[i].r=read();s[i].a=read();
if(s[i].r<s[i].l)
s[i].r+=m;
}
s[++k].l=1;s[k].r=m;
s[k].a=1e9;
solve(1,t,1,k);
for(int i=1;i<=n;i++){
if(w[i]<k){
write(w[i]);
puts("");
}
else
puts("NIE");
}
return 0;
}