#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
using PII = pair<ll, ll>;
#define FOR(i,a,n) for(ll i=(ll)a; i<(ll)n; ++i)
#define REP(i,n) FOR(i,0,n)



int main() {
	int N, M, MD, K;
	cin >> N >> M >> MD >> K;
	vector<vector<pair<int, long long int>>>rev_edge(N + 1);
	for (int i = 0; i < M; i++) {
		int l, r, k;
		cin >> l >> r >> k;
		rev_edge[r].push_back({ l,k });
	}
	vector<vector<long long int>>dis(MD, vector<long long int>(N + 1,MOD*MOD));
	for (int i = 0; i < MD; i++) {
		for (int j = i; j <= N; j += MD) {
			dis[i][j] = 0;
		}
		priority_queue<pair<long long int, int>, vector<pair<long long int, int>>, greater<pair<long long int, int>>>PQ;
		for (int j = 0; j <= N; j++) {
			if (dis[i][j] == MOD*MOD) continue;
			PQ.push({ dis[i][j],j });
		}
		while (!PQ.empty()) {
			int cn = PQ.top().second;
			long long int c = PQ.top().first;
			PQ.pop();
			for (auto j : rev_edge[cn]) {
				if (dis[i][j.first]>c + j.second) {
					dis[i][j.first] = c + j.second;
					PQ.push({ dis[i][j.first],j.first });
				}
			}
		}
	}
	long long int ans = 0;
	for (int i = 0; i < K; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		long long int add = 0;
		for (int j = 0; j < MD; j++) {
			add = max(add, c - dis[j][a] - dis[j][b]);
		}
		ans += add;
	}
	cout << ans << endl;
}

