# include<iostream>
# include<algorithm>
# include<cmath>
# include<queue>
# define endl "\n"
# define int long long
using namespace std;
const int maxn=100001, mod=10000;
int n, m, s, t, t0, cnt, head[maxn], ins[maxn], num[maxn], dis[maxn];
queue<int> q;
struct node{
int u, v, w, next;
}edge[maxn*4];
inline void add(int u, int v, int w) {
cnt++;
edge[cnt].u=u;
edge[cnt].v=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt;
ins[v]++;
}
signed main() {
cin >> n >> m >> s >> t >> t0;
while(m--) {
int u, v, w;
cin >> u >> v >> w;
add(u, v, w);
}
q.push(s); num[s]=1;
while(!q.empty()) {
int u=q.front(); q.pop();
for(int i=head[u]; i; i=edge[i].next) {
int v=edge[i].v, w=edge[i].w;
num[v]=(num[v]+num[u])%mod;
dis[v]=(dis[v]+dis[u]+w*num[u])%mod;
ins[v]--;
if(ins[v]==0) q.push(v);
}
}
cout << dis[t]+(num[t]-1)*t0%mod;
return 0;
}
悬关qwq