#include <iostream>
using namespace std;
struct opt {
int l, r, val;
};
struct country {
int p, id;
};
constexpr int N = 3e5 + 10;
opt q[N];
bool unable[N];
country a[N], a1[N], a2[N];
int n, m, k, h[N], e[N], ne[N], idx, c[N], ans[N];
void update(int k, int x) {
while (k < N) {
c[k] += x;
k += (k & -k);
}
}
int getsum(int k) {
int res = 0;
while (k) {
res += c[k];
k -= (k & -k);
}
return res;
}
void push(int u, int val) {
++idx;
e[idx] = val;
ne[idx] = h[u];
h[u] = idx;
}
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[a[i].id] = l;
return;
}
int mid = (l + r) >> 1, c1 = 0, c2 = 0;
for (int i = l; i <= mid; i++) {
if (q[i].l <= q[i].r) update(q[i].l, q[i].val), update(q[i].r + 1, -q[i].val);
else update(q[i].l, q[i].val), update(m + 1, -q[i].val), update(1, q[i].val), update(q[i].r + 1, -q[i].val);
}
for (int i = L; i <= R; i++) {
int cnt = 0;
for (int j = h[a[i].id]; j; j = ne[j]) cnt += getsum(e[j]);
if (a[i].p <= cnt) a1[++c1] = a[i];
else a[i].p -= cnt, a2[++c2] = a[i];
}
for (int i = 1; i <= mid; i++) {
if (q[i].l <= q[i].r) update(q[i].l, -q[i].val), update(q[i].r + 1, q[i].val);
else update(q[i].l, -q[i].val), update(m + 1, q[i].val), update(1, -q[i].val), update(q[i].r + 1, q[i].val);
}
for (int i = 1; i <= c1; i++) a[L + i - 1] = a1[i];
for (int i = 1; i <= c2; i++) a[L + c1 + i - 1] = a2[i];
solve(l, mid, L, L + c1 - 1);
solve(mid + 1, r, L + c1, R);
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int t;
cin >> t;
push(t, i);
}
for (int i = 1; i <= n; i++) cin >> a[i].p, a[i].id = i;
cin >> k;
for (int i = 1; i <= k; i++) {
cin >> q[i].l >> q[i].r >> q[i].val;
if (q[i].l <= q[i].r) update(q[i].l, q[i].val), update(q[i].r + 1, -q[i].val);
else update(q[i].l, q[i].val), update(m + 1, -q[i].val), update(1, q[i].val), update(q[i].r + 1, -q[i].val);
}
for (int i = 1; i <= n; i++) {
int cnt = 0;
for (int j = h[i]; j; j = ne[j]) cnt += getsum(e[j]);
unable[i] = cnt < a[i].p;
}
for (int i = 1; i <= k; i++) {
if (q[i].l <= q[i].r) update(q[i].l, -q[i].val), update(q[i].r + 1, q[i].val);
else update(q[i].l, -q[i].val), update(m + 1, q[i].val), update(1, -q[i].val), update(q[i].r + 1, q[i].val);
}
solve(1, k, 1, n);
for (int i = 1; i <= n; i++) {
if (unable[i]) cout << "NIE" << '\n';
else cout << ans[i] << '\n';
}
return 0;
}