#include<iostream>
#include<string.h>
#include<cmath>
#include<stdio.h>
#include<algorithm>
const int N=100100;
//struct oi{
// int start,time;
//};
//oi a[N];
using namespace std;
int read(){
int f=1,a=getchar(),x=0;
if(a=='-') {
f=-1;a=getchar();
}
while(a>='0'&&a<='9'){
x*=10;
x+=a-'0';
a=getchar();
}
return x*f;
}
int d[N],pre[N],t[N],a[N],b[N],wait[N],zz[N];
struct oi{
int pep=0,point,need,start;
}qwq[999999];
bool cmp(oi a,oi b){
// return a.point*a.pep>b.point*b.pep;
return a.need>b.need;
}
int pp(int a){
if(a>0)
return a;
else return 0;
}
int main(){
int n,i,m,k;
long long sum=0;
cin>>n>>m>>k;
for(i=1;i<=n;i++){
d[i]=read();
pre[i]+=d[i];
}
for(i=1;i<=m;i++){
t[i]=read();a[i]=read();b[i]=read();
sum+=pre[b[i]]-pre[a[i]];
for(int op=a[i];op<b[i];op++)
qwq[op].pep++;
// qwq[b[i]].pep--;
// cin>>q>>w>>e;
wait[a[i]]=max(wait[a[i]],t[i]);
sum+=wait[a[i]];
// cin>>t[i]>>a[i]>>b[i];
}
// cout<<sum<<endl;
for(i=1;i<=n;i++){
qwq[i].start=i;
// int u=qwq[i].point*qwq[i].pep;
int u=qwq[i].pep;
for(int j=i+1;j<=n;j++){
if(wait[j]>=pre[j]||j==n){
zz[i]=j;
qwq[i].need=u;
break;
}
u+=qwq[j].pep;
}
}
// for(i=1;i<=m;i++){
// qwq[i].point=zz[i]-i;
// }
sort(qwq+1,qwq+m+1,cmp);
for(i=1;k;i++){
int op=qwq[i].start+2;
if(d[op]>=k){sum-=qwq[i].need*k;
k=0;
// sum-=(qwq[i].point*qwq[i].pep)*k;
break;
}
else{
k-=d[op];
// sum-=(qwq[i].point*qwq[i].pep)*d[i];
sum-=qwq[i].need*d[op];
}
}
cout<<sum;
return 0;
}