#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MOD 998244353
void solve()
{
	ll n, m, s, t, l, k, u, v, c, ans = 0;
	cin >> n >> m;
	cin >> s >> t >> l >> k;
	vector<pair<int, int>> g[n + 1];
	ll dists[n + 1], distt[n + 1];
	for (int i = 0; i <= n; i++)
	{
		dists[i] = distt[i] = 1e16;
	}
	for (int i = 0; i < m; i++)
	{
		cin >> u >> v >> c;
		g[u].push_back({v, c});
		g[v].push_back({u, c});
	}
	priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> pq, pq2;
	dists[s] = 0;
	pq.push({0, s});
	while (!pq.empty())
	{
		auto [w, u] = pq.top();
		pq.pop();
		for (auto [i, j] : g[u])
		{
			if (dists[u] + j < dists[i])
			{
				dists[i] = dists[u] + j;
				pq.push({dists[i], i});
			}
		}
	}
	distt[t] = 0;
	pq2.push({0, t});
	while (!pq2.empty())
	{
		auto [w, u] = pq2.top();
		pq2.pop();
		for (auto [i, j] : g[u])
		{
			if (distt[u] + j < distt[i])
			{
				distt[i] = distt[u] + j;
				pq2.push({distt[i], i});
			}
		}
	}
	for (int i = 1; i <= n; i++)
	{
		if (dists[i] + distt[i] <= k)
		{
			cout << (n * (n - 1)) / 2 << '\n';
			return;
		}
	}
	sort(distt, distt + n + 1);
	k -= l;
	for (int i = 1; i <= n; i++)
	{
		ans += upper_bound(distt, distt + n + 1, k - dists[i]) - distt;
	}
	cout << ans << '\n';
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int tests = 1;
	// cin >> tests;
	for (int i = 1; i <= tests; i++)
		solve();
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |