// https://szkopul.edu.pl/problemset/problem/czzVm7v3I58TnPHzBgWiyELT/site/?key=statement
// Meteory
// XVIII OI 3 etap (dzień 2)
#include <bits/stdc++.h>
using namespace std;
#define int long long
// #define DBG_HOSTEK true
constexpr int sizik = 500 * 1001, MAXI = 1e9 + 7;
#define ar std::array
#define pr std::pair
#define vec std::vector
typedef long long ll;
typedef vec<vec<int>> _kra;
int d[4 * sizik];
typedef int T;
struct DrzewoPrzedzialowe {
int ll = 1;
T op(const T& a, const T& b) { return a + b; }
void akt(int o, int x, int y, int A, int B, const T& a) {
if (A <= x && y <= B) {
d[o] = op(d[o], a);
return;
}
if (B < x || y < A) return;
akt(2 * o, x, (x + y) / 2, A, B, a);
akt(2 * o + 1, (x + y) / 2 + 1, y, A, B, a);
}
void akt(int A, int B, const T& a) { akt(1, 1, ll, A, B, a); }
T get(int v) {
v += ll - 1;
T res = 0;
while (v > 0) {
res = op(res, d[v]);
v >>= 1;
}
return res;
}
void clear() {
for (int i = 0; i <= 2 * ll; i++) {
d[i] = 0;
}
}
DrzewoPrzedzialowe(int n) {
while (ll < n) {
ll *= 2;
}
}
};
vec<int> mids[sizik];
int p[sizik];
// int o[sizik];
vec<int> Rev_o[sizik];
ar<int, 2> Range[sizik];
int ansix[sizik];
void solve() {
int n, m;
std::cin >> n >> m;
for (int i = 0; i < m; i++) {
// std::cin >> o[i];
int tmp;
std::cin >> tmp;
Rev_o[tmp - 1].push_back(i);
}
for (int i = 0; i < n; i++) {
std::cin >> p[i];
}
int k;
std::cin >> k;
std::vector<ar<int, 3>> v(k);
for (auto& [l, r, a] : v) {
std::cin >> l >> r >> a;
}
int local_temp = (k + 2) >> 1;
for (int i = 0; i < n; i++) {
mids[local_temp].push_back(i);
Range[i] = {1, k + 1};
}
DrzewoPrzedzialowe d(m);
int _left = n;
while (_left > 0) {
d.clear();
for (int i = 0; i < k; i++) {
const auto& [l, r, a] = v[i];
if (l <= r) {
d.akt(l, r, a);
} else {
d.akt(l, m, a);
d.akt(1, r, a);
}
if (mids[i + 1].size() > 0) {
for (const auto& c : mids[i + 1]) {
int local_sum = 0;
for (const auto& j : Rev_o[c]) {
if (local_sum < MAXI) {
local_sum += d.get(j + 1);
} else {
break;
}
}
if (p[c] <= local_sum) {
Range[c][1] = i + 1;
} else {
Range[c][0] = i + 2;
}
if (Range[c][0] >= Range[c][1]) {
_left--;
} else {
mids[(Range[c][0] + Range[c][1]) >> 1].push_back(c);
}
}
mids[i + 1].clear();
mids[i + 1].shrink_to_fit();
}
}
}
for (int i = 0; i < n; i++) {
if (Range[i][0] >= Range[i][1]) {
ansix[i] = Range[i][0];
}
}
for (int i = 0; i < n; i++) {
if (ansix[i] == k + 1) {
std::cout << "NIE\n";
} else {
std::cout << ansix[i] << '\n';
}
}
}
int32_t main() {
#ifndef DBG_HOSTEK
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
#endif
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}