#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mzhxi=-1e18;
int n,m,t,c[51],cnt,id[51][6];
struct matrix{
int sz,a[251][251];
matrix(){
for(int i=1;i<=250;i++){
for(int j=1;j<=250;j++) a[i][j]=mzhxi;
}
sz=0;
}
};
matrix trans,pw[30];
inline matrix mul(matrix x,matrix y){
matrix z;
z.sz=x.sz;
for(int i=1;i<=x.sz;i++){
for(int j=1;j<=x.sz;j++){
for(int k=1;k<=x.sz;k++){
if(x.a[i][k]==mzhxi||y.a[k][j]==mzhxi) continue;
z.a[i][j]=max(z.a[i][j],x.a[i][k]+y.a[k][j]);
}
}
}
return z;
}
inline matrix mul2(matrix a,int mi){
for(int bit=0;bit<=29;bit++){
if((mi>>bit)&1){
matrix res;
res.sz=a.sz;
for(int j=1;j<=a.sz;j++){
for(int k=1;k<=a.sz;k++){
if(a.a[1][k]==mzhxi||pw[bit].a[k][j]==mzhxi) continue;
res.a[1][j]=max(res.a[1][j],a.a[1][k]+pw[bit].a[k][j]);
}
}
a=res;
}
}
return a;
}
struct node{
int t,u,w;
};
node x[201];
inline bool cmp(node l1,node l2){
return l1.t<l2.t;
}
int k;
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m>>t>>k;
for(int i=1;i<=n;i++) cin>>c[i];
trans.sz=n*5;
for(int i=1;i<=n;i++){
for(int j=1;j<=5;j++) id[i][j]=++cnt;
for(int j=1;j<5;j++) trans.a[id[i][j]][id[i][j+1]]=0;
}
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
trans.a[id[u][w]][id[v][1]]=c[v];
}
for(int i=1;i<=k;i++) cin>>x[i].t>>x[i].u>>x[i].w;
sort(x+1,x+k+1,cmp);
pw[0]=trans;
for(int i=1;i<=29;i++) pw[i]=mul(pw[i-1],pw[i-1]);
matrix base;//这一份代码提交上去会AC,但是本地RE,这空间也不大吧,这是爆栈的问题吗?
base.sz=n*5;
base.a[1][1]=c[1];
int lt=0;
for(int i=1;i<=k;i++){
base=mul2(base,x[i].t-lt);
if(base.a[1][id[x[i].u][1]]!=mzhxi) base.a[1][id[x[i].u][1]]+=x[i].w;
lt=x[i].t;
}
if(lt!=t) base=mul2(base,t-lt);
if(base.a[1][1]==mzhxi) cout<<-1<<endl;
else cout<<base.a[1][1]<<endl;
return 0;
}
另外这个和我这个情况一样吗?