#include <bits/stdc++.h>
#include <cassert>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> ii;
typedef pair<ll, ll> pll;
typedef pair<int, ll> pil;
typedef vector<int> vi;
typedef unsigned long long ull;
typedef double db;
typedef long double ld;
#define fi first
#define se second
#define vt vector
#define all(x) x.begin(), x.end()
#define popcnt __builtin_popcount
#define hibit(x) 31 - __builtin_clz(x)

constexpr int N = 2e5 + 1;

int x[N], y[N], c[N];
ll a[N], dp[N], st[N << 2], lz[N << 2];

void build(int u, int l, int r) {
    if (l == r) {
        st[u] = -a[l];
        return;
    }
    const int mid = l + r >> 1, c1 = u << 1, c2 = c1 | 1;
    build(c1, l, mid);
    build(c2, mid + 1, r);
    st[u] = max(st[c1], st[c2]);
}

inline void push(int u, int c1, int c2) {
    if (lz[u] != lz[c1]) {
        st[c1] += lz[u] - lz[c1];
        lz[c1] = lz[u];
    }
    if (lz[u] != lz[c2]) {
        st[c2] += lz[u] - lz[c2];
        lz[c2] = lz[u];
    }
}

void upd(int u, int l, int r, int ql, ll v) {
    if (ql > r) return;
    if (ql <= l) {
        if (lz[u] < v) {
            st[u] += v - lz[u];
            lz[u] = v;
        }
        return;
    }
    const int mid = l + r >> 1, c1 = u << 1, c2 = c1 | 1;
    push(u, c1, c2);
    upd(c1, l, mid, ql, v);
    upd(c2, mid + 1, r, ql, v);
}

ll query(int u, int l, int r, int ql, int qr) {
    if (ql > r || qr < l) return 0;
    if (ql <= l && r <= qr) return st[u];
    const int mid = l + r >> 1, c1 = u << c1, c2 = c1 | 1;
    push(u, c1, c2);
    return max(query(c1, l, mid, ql, qr), query(c2, mid + 1, r, ql, qr));
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i];
        a[i] += a[i - 1];
    }
    for (int i = 1; i <= n; ++i) cin >> x[i] >> y[i] >> c[i];
    build(1, 0, n);
    for (int i = 1; i <= n; ++i) {
        dp[i] = a[i] - c[i] + query(1, 0, n, i - x[i], i - y[i]);
        upd(1, 0, n, i, dp[i]);
    }
    cout << *max_element(dp + 1, dp + n + 1);
}