program bus;
const
maxm=10001;
maxf=1001;
var a,b,t:array[0..maxm] of longint;
right,s,ina,off,get,leave,d:array[0..maxf+1] of longint;
p,c,n,m,k,i,j,maxk,maxi,temp:longint;
reducenum:longint;
function max(q,p:longint):longint;
begin
if q>p then exit(q);
exit(p);
end;
function min(q,p:longint):longint;
begin
if q>p then exit(p);
exit(q);
end;
begin
read(n,m,k);
for i:=1 to n-1 do read(D[i]);
for i:=1 to m do
begin
read(t[i],a[i],b[i]);
inc(off[b[i]]);
leave[a[i]]:=max(leave[a[i]],t[i]);
end;
for i:=2 to n do
get[i]:=max(leave[i-1],get[i-1])+D[i-1];
p:=1;
for i:=1 to n do
begin
while((p<n)and(leave[p]<get[p]))or(p<=i)do
inc(p);
right[i]:=p;
end;
for i:=1 to n do
s[i]:=s[i-1]+off[i];
while k>0 do
begin
maxk:=0;
for i:=1 to n-1 do
if (s[right[i]]-s[i]>maxk)and(d[i]>0)
then begin
maxk:=s[right[i]]-s[i];
maxi:=i;
end;
if maxk=0
then break
else begin
temp:=maxlongint;
j:=maxi+1;
while(j<n)and(leave[j]<get[j])do
begin
temp:=min(get[j]-leave[j],temp);
inc(j);
end;
temp:=min(D[maxi],temp);
temp:=min(k,temp);
dec(k,temp);
dec(D[maxi],temp);
for j:=maxi+1 to right[i] do
get[j]:=max(get[j-1],leave[j-1])+D[j-1];
p:=maxi;
c:=off[maxi];
for j:=maxi to right[i]-1 do
begin
while((p<n)and(leave[p]<get[p]))or(p<=j)do inc(p);
if p>=right[j] then
break;
right[j]:=p;
end;
end;
end;
get[1]:=leave[1];
get[n]:=max(get[n],leave[n]);
for i:=1 to m do
inc(reducenum,get[b[i]]-t[i]);
writeln(reducenum);
end.
/**************************************************************
Problem: 2309
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/