#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 3e5+10;
int n, m;
ll fw[N]; // m
void u(int idx, ll val){
for(; idx < N; idx += idx&(-idx)) fw[idx] += val;
}
ll query(int idx){
ll res = 0;
for(; idx > 0; idx -= idx&(-idx)) res += fw[idx];
return res;
}
void upd(int l, int r, ll a){
if(l > r){
// (1 to l) and (r to n)
// (1 to n) - (l+1 to n) + (r to n)
u(1, a);
u(r+1, -a);
u(l, a);
}else{
//(l to n) - (r+1 to n)
u(l, a);
u(r+1, -a);
}
}
ll wanted[N]; // n
int owner[N]; // m
vector<int> owned[N]; // n
int l[N], r[N]; // n
int x[N], y[N]; ll a[N]; // k
vector<int> queries[N]; // k
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for(int i = 1; i <= m; ++i) cin >> owner[i], owned[owner[i]].push_back(i);
for(int i = 1; i <= n; ++i) cin >> wanted[i];
int k; cin >> k;
for(int i = 1; i <= k; ++i) cin >> x[i] >> y[i] >> a[i];
for(int i = 1; i <= n; ++i) l[i] = 0, r[i] = k+1;
while(1){
bool finished = 1;
memset(fw, 0, sizeof fw);
for(int i = 1; i <= k; ++i) queries[i].clear();
for(int i = 1; i <= n; ++i){
if(l[i] != r[i]){
finished = 0;
queries[(l[i]+r[i])>>1].push_back(i);
}
}
if(finished) break;
for(int i = 0; i <= k; ++i){
if(i != 0) upd(x[i], y[i], a[i]);
for(int idx : queries[i]){
ll sum = 0;
for(int p : owned[idx]){
sum += query(p);
}
if(sum >= wanted[idx]) r[idx] = i;
else l[idx] = i+1;
}
}
}
for(int i = 1; i <= n; ++i){
if(l[i] == k+1) cout << "NIE\n";
else cout << l[i] << '\n';
}
}