#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
using ll=long long;
using pli=pair<ll,int>;
const int N=2e5+5;
const ll INF=1e18;
vector<pair<int,ll>> adj[N];
ll dist[N],L,K;
int n,m,S,T;
void dstra(int s,int U,int V){
adj[U].push_back({V,L}); adj[V].push_back({U,L});
for(int i=1;i<=n;i++){
dist[i]=INF;
}
priority_queue<pli,vector<pli>,greater<pli>> pq;
dist[s]=0; pq.push({dist[s],s});
while(!pq.empty())
{
auto [d,u]=pq.top(); pq.pop();
if(d!=dist[u]) continue;
for(auto [v,w]:adj[u]){
if(dist[u]+w<dist[v]){
dist[v]=dist[u]+w;
pq.push({dist[v],v});
}
}
}
adj[U].pop_back(); adj[V].pop_back();
}
int main(){
ios::sync_with_stdio(false); cin.tie(0);
cin>>n>>m>>S>>T>>L>>K;
for(int i=0;i<m;i++){
int u,v; ll w; cin>>u>>v>>w;
adj[u].push_back({v,w});
adj[v].push_back({u,w});
}
int cnt=0;
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
dstra(S,i,j);
if(dist[T]<=K) cnt++;
}
}
cout<<cnt<<endl;
}