rt
#include<bits/stdc++.h>
using namespace std;
int n,m,s,t;
long long ans=4000000000000000000;
struct g{
int u,v,w;
}b[1145140];
int vis[1145140];
void dfs(int ml,long long sm,int t)
{
if(t==s) {ans=min(ans,sm);return; }
if(vis[t]>=sm) return;
vis[t]=sm;
ml++;
for(int i=0;i<m;i++)
{
if(b[i].u==t){
dfs(ml,sm+ceil(b[i].w/ml),b[i].v);
}
if(b[i].v==t){
dfs(ml,sm+ceil(b[i].w/ml),b[i].u);
}
}
return;
}
int main()
{
cin>>n>>m>>s>>t;
for(int i=0;i<m;i++)
{
cin>>b[i].u>>b[i].v>>b[i].w;
vis[i]=-1;
}
dfs(0,0,t);
cout<<ans;
}