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
****************************************************************/