OI XVIII - met

// 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;
}