const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
const N = Number(await readline());
const M = Number(await readline());
const group = {};
for (let i = 0; i < M; i++) {
const [i, j, t] = (await readline()).split(" ").map(Number);
if (!group[i]) group[i] = [[j, t]];
else group[i].push([j, t]);
}
const virus = Number(await readline());
const visited = new Array(N + 1).fill(false);
const dist = new Array(N + 1).fill(Infinity);
dist[virus] = 0;
const queue = [];
queue.push([virus, dist[virus]]);
while (queue.length) {
const u = queue.pop()[0];
if (visited[u]) continue;
visited[u] = true;
if (group[u]) {
group[u].forEach(([v, w]) => {
const newDist = dist[u] + w;
if (newDist < dist[v]) {
dist[v] = newDist;
queue.push([v, newDist]);
}
queue.sort((a, b) => b[1] - a[1]);
});
}
}
let ans = 0;
for (let i = 1; i <= N; i++) {
ans = Math.max(ans, dist[i]);
}
console.log(ans == Infinity ? -1 : ans);
})();