#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");
void bfs()
{
if (stiva.empty() || stiva.top() == Y) return;
int nod = stiva.top();
vizitat[nod] = 1;
stiva.pop();
for (auto [nod2, Dist] : muchii[nod])
if (!vizitat[nod2])
{
stiva.push(nod2);
distante[nod2] += Dist + distante[nod];
}
bfs();
}
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);
bfs();
g << distante[Y];
return 0;
}