#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=55,K=505,T=52502,INF=0x3f3f3f3f;
ll n,m,t,k,c[N],f[N][T];
struct data{ll x,y;};
vector<data>mp[T];
struct edge{ll u,v,w;}e[K];
int main(){
freopen("delicacy.in","r",stdin);
freopen("delicacy.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&t,&k);
for(ll i=1;i<=n;i++)scanf("%d",&c[i]);
for(ll i=1;i<=m;i++)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
for(ll i=1,t,x,y;i<=k;i++)scanf("%d%d%d",&t,&x,&y),mp[t].push_back((data){x,y});
f[1][0]=c[1];
for(ll i=1;i<=t;i++){
for(ll j=1;j<=m;j++)if(e[j].w<=i)f[e[j].v][i]=max(f[e[j].v][i],f[e[j].u][i-e[j].w]+c[e[j].v]);
for(auto j:mp[i])f[j.x][i]+=j.y;
}
printf("%d\n",f[1][t]);
return 0;
}