#include using namespace std; typedef long long ll; typedef unsigned long long ull; const int N = 6e5 + 5, M = 2e4 + 5, inf = 0x3f3f3f3f, mod = 1e9 + 7; #define mst(a, b) memset(a, b, sizeof a) #define PII pair #define fi first #define se second #define pb emplace_back #define SZ(a) (int)a.size() #define IOS ios::sync_with_stdio(false), cin.tie(0) void Print(int *a, int n) { for (int i = 1; i < n; i++) printf("%d ", a[i]); printf("%d\n", a[n]); } int n, m, k; struct BIT { #define lowbit(x) x &(-x) #define il inline ll s[N]; int n; il void upd(int x, int v) { while (x <= 2 * m) { s[x] += v; x += lowbit(x); } return; } il ll que(int x) { ll ans = 0; while (x) { ans += s[x]; x -= lowbit(x); } return ans; } } T; vector a[N]; struct node { int x, id; } p[N], p1[N], p2[N]; struct query { int l, r, x; } q[N]; int ans[N]; void solve(int l, int r, int ql, int qr) { if (ql > qr) return; if (l == r) { for (int i = ql; i <= qr; i++) ans[p[i].id] = l; return; } int mid = (l + r) >> 1; int c1 = 0, c2 = 0; for (int i = l; i <= mid; i++) T.upd(q[i].l, q[i].x), T.upd(q[i].r + 1, -q[i].x); for (int i = ql; i <= qr; i++) { ll s = 0; int u = p[i].id; for (int j : a[u]) { s += T.que(j) + T.que(j + m); if (s >= p[i].x) break; } if (s >= p[i].x) p1[++c1] = p[i]; else p[i].x -= s, p2[++c2] = p[i]; } for (int i = 1; i <= c1; i++) p[ql + i - 1] = p1[i]; for (int i = 1; i <= c2; i++) p[ql + i + c1 - 1] = p2[i]; for (int i = l; i <= mid; i++) T.upd(q[i].l, -q[i].x), T.upd(q[i].r + 1, q[i].x); solve(l, mid, ql, ql + c1 - 1), solve(mid + 1, r, ql + c1, qr); } int main() { scanf("%d%d", &n, &m); for (int i = 1, x; i <= m; i++) scanf("%d", &x), a[x].pb(i); for (int i = 1; i <= n; i++) scanf("%d", &p[i].x), p[i].id = i; scanf("%d", &k); for (int i = 1; i <= k; i++) { scanf("%d%d%d", &q[i].l, &q[i].r, &q[i].x); if (q[i].l > q[i].r) q[i].r += m; } q[++k].l = 1, q[k].r = 2 * m, q[k].x = inf; solve(1, k, 1, n); for (int i = 1; i <= n; i++) if (ans[i] == k) puts("NIE"); else printf("%d\n", ans[i]); return 0; }