#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
int N, M, X, Y;
vector<vector<pair<int,int>>> muchii;
int vizitat[30000];
stack<int> stiva;
long long distante[30000];
ifstream f("sate.in");
ofstream g("sate.out");
int main() {
f >> N >> M >> X >> Y;
muchii.resize(N + 1);
for (int i = 1; i <= M; i++)
{
int n1, n2, D;
f >> n1 >> n2>> D;
muchii[n1].push_back({ n2,D });
muchii[n2].push_back({ n1,-D });
}
stiva.push(X);
while (!(stiva.empty() || stiva.top() == Y))
{
int nod = stiva.top();
stiva.pop();
for (auto [nod2, Dist] : muchii[nod])
if (!vizitat[nod2])
{
stiva.push(nod2);
vizitat[nod] = 1;
distante[nod2] = Dist + distante[nod];
}
}
g << distante[Y];
return 0;
}