//#pragma GCC optimize("Ofast,unroll-loops")
//#pragma GCC target("avx2,tune=native")
#include <bits/stdc++.h>
using namespace std;
 
#define file "VISITPLACE"
#define ff(i, a, b) for(auto i=(a); i<=(b); ++i)
#define ffr(i, b, a) for(auto i=(b); i>=(a); --i)
#define nl "\n"
#define ss " "
//#define pb push_back
#define pb emplace_back
#define fi first
#define se second
#define sz(s) (int)s.size()
#define all(s) (s).begin(), (s).end()
#define ms(a,x) memset(a, x, sizeof (a))
#define cn continue
#define re exit(0)
 
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
 
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll ran(ll l, ll r)
{
    return uniform_int_distribution<ll> (l, r)(rng);
}
 
inline void rf()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    if(fopen(file".inp","r"))
    {
        freopen(file".inp","r",stdin);
        freopen(file".out","w",stdout);
    }
}
 
const int mod=1e9+7;
const int maxn=1e5+15;
const ll inf=5e16;
 
template<typename T> inline void add(T &x, const T &y)
{
    x+=y;
    if(x>=mod) x-=mod;
    if(x<0) x+=mod;
}
 
template<typename T> inline bool maxi(T &a, T b)
{
    if(a>=b) return 0;
    a=b; return 1;
}
 
template<typename T> inline bool mini(T &a, T b)
{
    if(a<=b) return 0;
    a=b; return 1;
}
 
 
const int N = 50,M = 505,K = 205,V = 250;
const ll INF = 1ll << 60;
 
int L;
struct Mat{
	ll a[V][V];
	inline void init(){
		for (int i = 0; i < L; ++i) for (int j = 0; j < L; ++j) a[i][j] = -INF;
	}
};
struct Vec{
	ll a[V];
	inline void init(){
		for (int i = 0; i < L; ++i) a[i] = -INF;
	}
};
Mat operator * (const Mat A,const Mat B){
	static Mat T; T.init();
	for (int k = 0; k < L; ++k) for (int i = 0; i < L; ++i) for (int j = 0; j < L; ++j)
		if (A.a[i][k] + B.a[k][j] > T.a[i][j]) T.a[i][j] = A.a[i][k] + B.a[k][j];
	return T;
}
Vec operator * (const Mat A,const Vec B){
	static Vec T; T.init();
	for (int i = 0; i < L; ++i) for (int j = 0; j < L; ++j)
		if (A.a[j][i] + B.a[j] > T.a[i]) T.a[i] = A.a[j][i] + B.a[j];
	return T;
}
 
int n,m,T,k,c[N];
int ex[M],ey[M],ez[M];
Mat I,Tr,A[30];
Vec st; int nowt;
int id[N][5];
struct Festival{
	int t,x,y;
}ev[K];
 
int main(){
    rf();
	int i,j;
	cin >> n >> m >> T >> k;
	I.init(); L = n * 5;
	for (i = 0; i < n; ++i) cin >> c[i];
	for (i = 0; i < n; ++i) I.a[i][i] = 0;
	for (i = 0; i < n; ++i) for (j = 0; j < 5; ++j) id[i][j] = j * n + i;
	for (i = 1; i <= m; ++i) cin >> ex[i] >> ey[i] >> ez[i],--ex[i],--ey[i];
	Tr.init();
	for (i = 0; i < n; ++i)
	for (j = 1; j < 5; ++j) Tr.a[id[i][j]][id[i][j-1]] = (j==1) ? (c[i]) : (0);
	for (i = 1; i <= m; ++i) Tr.a[id[ex[i]][0]][id[ey[i]][ez[i]-1]] = (ez[i]==1) ? (c[ey[i]]) : (0);
	A[0] = Tr;
	for (i = 1; i < 30; ++i) A[i] = A[i-1] * A[i-1];
 
	for (i = 1; i <= k; ++i) cin >> ev[i].t >> ev[i].x >> ev[i].y,--ev[i].x;
	for (i = 1; i <= k; ++i) for (j = i+1; j <= k; ++j) if (ev[j].t < ev[i].t) swap(ev[i],ev[j]);
	if (ev[k].t != T){ ++k; ev[k].t = T,ev[k].x = ev[k].y = 0; }
	st.init(); st.a[id[0][0]] = c[0]; nowt = 0;
	for (i = 1; i <= k; ++i){
		int dt = ev[i].t - nowt;
		for (j = 0; j < 30; ++j) if (dt>>j&1) st = A[j] * st;
		if (st.a[ev[i].x] >= 0) st.a[ev[i].x] += ev[i].y;
		nowt = ev[i].t;
	}
	if (st.a[0] < 0) st.a[0] = -1;
	cout << st.a[0] << '\n';
}
 
				Ly8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QsdW5yb2xsLWxvb3BzIikKLy8jcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsdHVuZT1uYXRpdmUiKQojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgZmlsZSAiVklTSVRQTEFDRSIKI2RlZmluZSBmZihpLCBhLCBiKSBmb3IoYXV0byBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgZmZyKGksIGIsIGEpIGZvcihhdXRvIGk9KGIpOyBpPj0oYSk7IC0taSkKI2RlZmluZSBubCAiXG4iCiNkZWZpbmUgc3MgIiAiCi8vI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHN6KHMpIChpbnQpcy5zaXplKCkKI2RlZmluZSBhbGwocykgKHMpLmJlZ2luKCksIChzKS5lbmQoKQojZGVmaW5lIG1zKGEseCkgbWVtc2V0KGEsIHgsIHNpemVvZiAoYSkpCiNkZWZpbmUgY24gY29udGludWUKI2RlZmluZSByZSBleGl0KDApCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxwaWk+IHZwaWk7CnR5cGVkZWYgdmVjdG9yPHBsbD4gdnBsbDsKCm10MTk5MzdfNjQgcm5nKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CmxsIHJhbihsbCBsLCBsbCByKQp7CiAgICByZXR1cm4gdW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGxsPiAobCwgcikocm5nKTsKfQoKaW5saW5lIHZvaWQgcmYoKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7IGNvdXQudGllKG51bGxwdHIpOwogICAgaWYoZm9wZW4oZmlsZSIuaW5wIiwiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oZmlsZSIuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4oZmlsZSIub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KfQoKY29uc3QgaW50IG1vZD0xZTkrNzsKY29uc3QgaW50IG1heG49MWU1KzE1Owpjb25zdCBsbCBpbmY9NWUxNjsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIGFkZChUICZ4LCBjb25zdCBUICZ5KQp7CiAgICB4Kz15OwogICAgaWYoeD49bW9kKSB4LT1tb2Q7CiAgICBpZih4PDApIHgrPW1vZDsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgbWF4aShUICZhLCBUIGIpCnsKICAgIGlmKGE+PWIpIHJldHVybiAwOwogICAgYT1iOyByZXR1cm4gMTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGJvb2wgbWluaShUICZhLCBUIGIpCnsKICAgIGlmKGE8PWIpIHJldHVybiAwOwogICAgYT1iOyByZXR1cm4gMTsKfQoKCmNvbnN0IGludCBOID0gNTAsTSA9IDUwNSxLID0gMjA1LFYgPSAyNTA7CmNvbnN0IGxsIElORiA9IDFsbCA8PCA2MDsKCmludCBMOwpzdHJ1Y3QgTWF0ewoJbGwgYVtWXVtWXTsKCWlubGluZSB2b2lkIGluaXQoKXsKCQlmb3IgKGludCBpID0gMDsgaSA8IEw7ICsraSkgZm9yIChpbnQgaiA9IDA7IGogPCBMOyArK2opIGFbaV1bal0gPSAtSU5GOwoJfQp9OwpzdHJ1Y3QgVmVjewoJbGwgYVtWXTsKCWlubGluZSB2b2lkIGluaXQoKXsKCQlmb3IgKGludCBpID0gMDsgaSA8IEw7ICsraSkgYVtpXSA9IC1JTkY7Cgl9Cn07Ck1hdCBvcGVyYXRvciAqIChjb25zdCBNYXQgQSxjb25zdCBNYXQgQil7CglzdGF0aWMgTWF0IFQ7IFQuaW5pdCgpOwoJZm9yIChpbnQgayA9IDA7IGsgPCBMOyArK2spIGZvciAoaW50IGkgPSAwOyBpIDwgTDsgKytpKSBmb3IgKGludCBqID0gMDsgaiA8IEw7ICsraikKCQlpZiAoQS5hW2ldW2tdICsgQi5hW2tdW2pdID4gVC5hW2ldW2pdKSBULmFbaV1bal0gPSBBLmFbaV1ba10gKyBCLmFba11bal07CglyZXR1cm4gVDsKfQpWZWMgb3BlcmF0b3IgKiAoY29uc3QgTWF0IEEsY29uc3QgVmVjIEIpewoJc3RhdGljIFZlYyBUOyBULmluaXQoKTsKCWZvciAoaW50IGkgPSAwOyBpIDwgTDsgKytpKSBmb3IgKGludCBqID0gMDsgaiA8IEw7ICsraikKCQlpZiAoQS5hW2pdW2ldICsgQi5hW2pdID4gVC5hW2ldKSBULmFbaV0gPSBBLmFbal1baV0gKyBCLmFbal07CglyZXR1cm4gVDsKfQoKaW50IG4sbSxULGssY1tOXTsKaW50IGV4W01dLGV5W01dLGV6W01dOwpNYXQgSSxUcixBWzMwXTsKVmVjIHN0OyBpbnQgbm93dDsKaW50IGlkW05dWzVdOwpzdHJ1Y3QgRmVzdGl2YWx7CglpbnQgdCx4LHk7Cn1ldltLXTsKCmludCBtYWluKCl7CiAgICByZigpOwoJaW50IGksajsKCWNpbiA+PiBuID4+IG0gPj4gVCA+PiBrOwoJSS5pbml0KCk7IEwgPSBuICogNTsKCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNpbiA+PiBjW2ldOwoJZm9yIChpID0gMDsgaSA8IG47ICsraSkgSS5hW2ldW2ldID0gMDsKCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGZvciAoaiA9IDA7IGogPCA1OyArK2opIGlkW2ldW2pdID0gaiAqIG4gKyBpOwoJZm9yIChpID0gMTsgaSA8PSBtOyArK2kpIGNpbiA+PiBleFtpXSA+PiBleVtpXSA+PiBleltpXSwtLWV4W2ldLC0tZXlbaV07CglUci5pbml0KCk7Cglmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJZm9yIChqID0gMTsgaiA8IDU7ICsraikgVHIuYVtpZFtpXVtqXV1baWRbaV1bai0xXV0gPSAoaj09MSkgPyAoY1tpXSkgOiAoMCk7Cglmb3IgKGkgPSAxOyBpIDw9IG07ICsraSkgVHIuYVtpZFtleFtpXV1bMF1dW2lkW2V5W2ldXVtleltpXS0xXV0gPSAoZXpbaV09PTEpID8gKGNbZXlbaV1dKSA6ICgwKTsKCUFbMF0gPSBUcjsKCWZvciAoaSA9IDE7IGkgPCAzMDsgKytpKSBBW2ldID0gQVtpLTFdICogQVtpLTFdOwoKCWZvciAoaSA9IDE7IGkgPD0gazsgKytpKSBjaW4gPj4gZXZbaV0udCA+PiBldltpXS54ID4+IGV2W2ldLnksLS1ldltpXS54OwoJZm9yIChpID0gMTsgaSA8PSBrOyArK2kpIGZvciAoaiA9IGkrMTsgaiA8PSBrOyArK2opIGlmIChldltqXS50IDwgZXZbaV0udCkgc3dhcChldltpXSxldltqXSk7CglpZiAoZXZba10udCAhPSBUKXsgKytrOyBldltrXS50ID0gVCxldltrXS54ID0gZXZba10ueSA9IDA7IH0KCXN0LmluaXQoKTsgc3QuYVtpZFswXVswXV0gPSBjWzBdOyBub3d0ID0gMDsKCWZvciAoaSA9IDE7IGkgPD0gazsgKytpKXsKCQlpbnQgZHQgPSBldltpXS50IC0gbm93dDsKCQlmb3IgKGogPSAwOyBqIDwgMzA7ICsraikgaWYgKGR0Pj5qJjEpIHN0ID0gQVtqXSAqIHN0OwoJCWlmIChzdC5hW2V2W2ldLnhdID49IDApIHN0LmFbZXZbaV0ueF0gKz0gZXZbaV0ueTsKCQlub3d0ID0gZXZbaV0udDsKCX0KCWlmIChzdC5hWzBdIDwgMCkgc3QuYVswXSA9IC0xOwoJY291dCA8PCBzdC5hWzBdIDw8ICdcbic7Cn0K