#include<bits/stdc++.h>
#define intu unsigned long long
using namespace std;
intu ans=0;
struct Q1{
intu time,from,to;
}C1[10001];
intu C2[10001];
struct Q2{
intu real,code;
}times[10001];
intu n,m,t;
intu ton[10001];
intu maxn[10001];
intu kmaxn[10001];
int ttt=0;
bool F1(Q2 a,Q2 b){
if(a.real>b.real) return 1;
else return 0;
}
bool F2(Q1 c,Q1 d){
if(c.from<d.from) return 1;
else if(c.from==d.from){
if(c.time<d.time) return 1;
else return 0;
}
else return 0;
}
bool F3(Q1 ee,Q1 ff){
if(ee.to<ff.to) return 1;
else return 0;
}
intu found_code(intu &x){
for(intu r=1;r<=m;r++){
ttt++;
if(C1[r].from>x||(C1[r].from==0)) {
return r-1;
}
}
//return ttt;
}
void add(){
int ll=0;
for(int i=1;;i++){
if(C1[i].from==0) return;
else{
maxn[++ll]=C1[found_code(C1[i].from)].time;//maxn[1,5]
i=ttt-1;
continue;
}
}
}
void kadd(){//C2[1,4]
for(int i=1;i<n;i++){
kmaxn[i]=maxn[i]+C2[i];//kmaxn[2,9]
}
}
void shut(){
intu k=t;//t==2
for(intu i=1;i<=m;i++){
for(intu j=C1[i].from;j<C1[i].to;j++){
times[j].real++;//times.real[2,2]
}
times[i].code=i;//times.code[1,2]
}
stable_sort(times+1,times+n,F1);
for(intu i=1;i<n;i++){//kmaxn[2,9],maxn(C1[i].time:[1,5]),C2[1,4]->C2'[1,2],kmaxn'[2,7];
if(maxn[times[i].code]+C2[times[i].code]-k>=maxn[times[i].code+1]/*||times[i].code==n*/){
C2[times[i].code]-=k;
return;
}
else if(maxn[times[i].code]+C2[times[i].code]>maxn[times[i].code+1]&&maxn[times[i].code]+C2[times[i].code]-k<maxn[times[i].code+1]){
C2[times[i].code]-=maxn[times[i].code]+C2[times[i].code]-maxn[times[i].code+1];
k-=maxn[times[i].code]+C2[times[i].code]-maxn[times[i].code+1];
continue;
}
else continue;
}
return;
}
int main(){
cin>>n>>m>>t;//景点,人数,加速器个数。
for(intu i=1;i<n;i++){
cin>>C2[i];
}
for(intu i=1;i<=m;i++){
cin>>C1[i].time>>C1[i].from>>C1[i].to;
}
stable_sort(C1+1,C1+m+1,F2);
add();
shut();
kadd();
stable_sort(C1+1,C1+m+1,F3);
int yyy=C1[1].to,lll=1;
C1[0].to=C1[1].to;
for(intu i=1;i<=m;i++){
if(C1[i].to!=C1[i-1].to){
++lll;
}
ans+=kmaxn[lll]-C1[i].time;
}
cout<<ans;
return 0;
}
困扰了我整整三天了!!!