#include <iostream>
#include <bits/stdc++.h>
#define inf 1000000
using namespace std;
typedef pair<int,int> ii;
int p,target;
vector<ii> adjls[10005];
vector<ii> adjlt[10005];
vector<int> dist[2];
int dijkstra(int s,int x)
{
vector<ii> *adjl;
if(x == 0)
adjl=adjls;
else
adjl=adjlt;
dist[x][s] = 0;
int maxtoll=-1;
priority_queue<ii> pq;
pq.push({0,s});
while(!pq.empty())
{
int u=pq.top().second,d=pq.top().first; pq.pop();
if(d>dist[x][u]) continue;
for(int j=0;j<adjl[u].size();++j)
{
int v=adjl[u][j].first,w=adjl[u][j].second;
if(x == 1)
if(dist[0][v]+w+d<=p && w>maxtoll)
maxtoll = w;
if((dist[x][u]+w) < dist[x][v] )
{
dist[x][v] = dist[x][u]+w;
pq.push({dist[x][v],v});
}
}
}
return maxtoll;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m,s; scanf("%d%d%d%d%d",&n,&m,&s,&target,&p);
for(int i=0;i<=n;++i){
adjls[i].clear();
adjls[i].reserve(100005);
adjlt[i].clear();
adjlt[i].reserve(100005);
}
dist[0].assign(n+2,1000000);
dist[1].assign(n+2,1000000);
while(m--)
{
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
adjls[u].push_back({v,c});
adjlt[v].push_back({u,c});
}
dijkstra(s,0);
printf("%d\n",dijkstra(target,1));
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBpbmYgMTAwMDAwMAp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0eXBlZGVmIHBhaXI8aW50LGludD4gaWk7CmludCBwLHRhcmdldDsKdmVjdG9yPGlpPiBhZGpsc1sxMDAwNV07CnZlY3RvcjxpaT4gYWRqbHRbMTAwMDVdOwp2ZWN0b3I8aW50PiBkaXN0WzJdOwppbnQgZGlqa3N0cmEoaW50IHMsaW50IHgpCnsKCiAgICB2ZWN0b3I8aWk+ICphZGpsOwogICAgaWYoeCA9PSAwKQogICAgICAgIGFkamw9YWRqbHM7CiAgICBlbHNlCiAgICAgICAgYWRqbD1hZGpsdDsKCiAgICBkaXN0W3hdW3NdID0gMDsKICAgIGludCBtYXh0b2xsPS0xOwogICAgcHJpb3JpdHlfcXVldWU8aWk+IHBxOwogICAgcHEucHVzaCh7MCxzfSk7CiAgICB3aGlsZSghcHEuZW1wdHkoKSkKICAgIHsKICAgICAgICBpbnQgdT1wcS50b3AoKS5zZWNvbmQsZD1wcS50b3AoKS5maXJzdDsgcHEucG9wKCk7CiAgICAgICAgaWYoZD5kaXN0W3hdW3VdKSBjb250aW51ZTsKICAgICAgICBmb3IoaW50IGo9MDtqPGFkamxbdV0uc2l6ZSgpOysraikKICAgICAgICB7CiAgICAgICAgICAgIGludCB2PWFkamxbdV1bal0uZmlyc3Qsdz1hZGpsW3VdW2pdLnNlY29uZDsKICAgICAgICAgICAgaWYoeCA9PSAxKQogICAgICAgICAgICAgICAgaWYoZGlzdFswXVt2XSt3K2Q8PXAgJiYgdz5tYXh0b2xsKQogICAgICAgICAgICAgICAgICAgIG1heHRvbGwgPSB3OwogICAgICAgICAgICBpZigoZGlzdFt4XVt1XSt3KSA8IGRpc3RbeF1bdl0gKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgIGRpc3RbeF1bdl0gPSBkaXN0W3hdW3VdK3c7CiAgICAgICAgICAgICAgICBwcS5wdXNoKHtkaXN0W3hdW3ZdLHZ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBtYXh0b2xsOwp9CmludCBtYWluKCkKewogICAgaW50IHQ7CiAgICBzY2FuZigiJWQiLCZ0KTsKICAgIHdoaWxlKHQtLSl7CiAgICBpbnQgbixtLHM7IHNjYW5mKCIlZCVkJWQlZCVkIiwmbiwmbSwmcywmdGFyZ2V0LCZwKTsKICAgIGZvcihpbnQgaT0wO2k8PW47KytpKXsKICAgICAgICBhZGpsc1tpXS5jbGVhcigpOwogICAgICAgIGFkamxzW2ldLnJlc2VydmUoMTAwMDA1KTsKICAgICAgICBhZGpsdFtpXS5jbGVhcigpOwogICAgICAgIGFkamx0W2ldLnJlc2VydmUoMTAwMDA1KTsKICAgICAgICB9CiAgICBkaXN0WzBdLmFzc2lnbihuKzIsMTAwMDAwMCk7CiAgICBkaXN0WzFdLmFzc2lnbihuKzIsMTAwMDAwMCk7CiAgICB3aGlsZShtLS0pCiAgICB7CiAgICAgICAgaW50IHUsdixjOwogICAgICAgIHNjYW5mKCIlZCVkJWQiLCZ1LCZ2LCZjKTsKICAgICAgICBhZGpsc1t1XS5wdXNoX2JhY2soe3YsY30pOwogICAgICAgIGFkamx0W3ZdLnB1c2hfYmFjayh7dSxjfSk7CgogICAgfQogICAgZGlqa3N0cmEocywwKTsKICAgIHByaW50ZigiJWRcbiIsZGlqa3N0cmEodGFyZ2V0LDEpKTsKCgoKICAgIH0KCn0K