#include #define int long long using namespace std; int n , k , q , a[50005] , cnt[50005] , ans[50005]; struct p { int l , r , x; }upd[10005] , qry[50005]; struct node { int l , r , tag; }; struct xds { node tree[200005]; inline void build(int p , int l , int r) { tree[p].l = l; tree[p].r = r; if(tree[p].l == tree[p].r) { tree[p].tag = 0; return; } int mid = (l + r) / 2; build(p * 2 , l , mid); build(p * 2 + 1 , mid + 1 , r); tree[p].tag = tree[p * 2].tag + tree[p * 2 + 1].tag; return; } inline void upd(int p , int l , int k) { if(tree[p].l == tree[p].r) { tree[p].tag += k; return; } if(tree[p * 2].r >= l) { upd(p * 2 , l , k); } else { upd(p * 2 + 1 , l , k); } tree[p].tag = tree[p * 2].tag + tree[p * 2 + 1].tag; return; } inline int query(int p , int l , int r) { if(l <= tree[p].l && tree[p].r <= r) { return tree[p].tag; } int cnt = 0; if(tree[p * 2].r >= l) { cnt += query(p * 2 , l , r); } if(tree[p * 2 + 1].l <= r) { cnt += query(p * 2 + 1 , l , r); } return cnt; } }xds; signed main() { ios::sync_with_stdio(0); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k >> q; for(int i = 1 ; i <= n ; i++) { cin >> a[i]; } for(int i = 1 ; i <= k ; i++) { cin >> upd[i].l >> upd[i].r >> upd[i].x; } xds.build(1 , 1 , n); for(int i = 1 ; i <= n ; i++) { xds.upd(1 , i , a[i]); } for(int i = 1 ; i <= q ; i++) { cin >> qry[i].l >> qry[i].r >> qry[i].x; cnt[i] = xds.query(1 , qry[i].l , qry[i].r); ans[i] = -1; if(cnt[i] >= qry[i].x) { ans[i] = 0; } } for(int i = 1 ; i <= k ; i++) { xds.build(1 , 1 , n); for(int j = upd[i].l ; j <= upd[i].r ; j++) { if(a[j] < upd[i].x) { xds.upd(1 , j , upd[i].x - a[j]); a[j] = upd[i].x; } } for(int j = 1 ; j <= q ; j++) { if(ans[j] == -1) { cnt[j] += xds.query(1 , qry[j].l , qry[j].r); if(cnt[j] >= qry[j].x) { ans[j] = i; } } } } for(int i = 1 ; i <= q ; i++) { cout << ans[i] << '\n'; } return 0; }