#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sate.in");
ofstream fout("sate.out");
const int MAXN = 30005;
vector<pair<int,int>> adiacenta[MAXN];
int main() {
int n, m , x, y;
fin>>n>>m>>x>>y;
for ( int k=0; k<m; k++) {
int i, j, d;
fin>>i>>j>>d;
adiacenta[i].push_back({j,d});
adiacenta[j].push_back({i,-d});
}
vector<int> distanta(n+1, 0);
vector<bool> vizitat(n+1,false);
queue<int> q;
q.push(x);
vizitat[x] = true;
distanta[x] = 0;
while (!q.empty()) {
int curent = q.front();
q.pop();
if (curent == y) {
break;
}
for (auto muchie: adiacenta[curent]) {
int vecin = muchie.first;
int cost = muchie.second;
if (vizitat[vecin] == false) {
vizitat[vecin] = true;
distanta[vecin] = distanta[curent] + cost;
q.push(vecin);
}
}
}
fout<<distanta[y]<<"\n";
fin.close();
fout.close();
return 0;
}