#include <bits/stdc++.h>
using namespace std;
struct node
{
int s,e,v;
}u;
vector <node> mapp;
int s,t,n,m;
int dis[10005];
int cnt[10005];
void ford(int s)
{
memset(dis,0x3f,sizeof dis);
dis[s]=0;
for(int i=1;i<=n;i++)
{
cnt[i]=INT_MIN;
}
for(int i=1;i<n;i++)
{
bool flag=0;
for(int j=0;j<mapp.size();j++)
{
int ns=mapp[j].s;
int ne=mapp[j].e;
int nv=mapp[j].v;
if(dis[ns]+nv<dis[ne])
{
dis[ne]=dis[ns]+nv;
cnt[ne]=max(nv,cnt[ns]);
flag=1;
}
}
if(flag==0) return;
}
}
int main()
{
cin >> n >> m >> s >> t;
while(m--)
{
int a,b,c;
cin >> a >> b >> c;
u.s=a;
u.e=b;
u.v=c;
mapp.push_back(u);
u.s=b;
u.e=a;
u.v=c;
mapp.push_back(u);
}
ford(s);
cout << cnt[t];
return 0;
}