import java.math.*

val INF = 1000000000

data class Edge(val src: Int, val dst: Int, val cost: Int)

class Node(val id: Int) {
    val edges = mutableListOf<Edge>()
    val nextNodes = mutableListOf<Node>()
    var distance = INF
    var parent: Node? = null
    fun addEdge(edge: Edge, dst: Node) {
        edges.add(edge)
        nextNodes.add(dst)
    }
}

fun main(args: Array<String>) {
    val (N, M, P) = readInputLine().split(" ").map{it.toInt()}

    val nodes = Array(N, {Node(it)})
    val edges = Array(M, {
        val (A, B, C) = readInputLine().split(" ").map{it.toInt()}
        Edge(A - 1, B - 1, (C - P) * -1)
    })

    for (e in edges) {
        nodes[e.src].addEdge(e, nodes[e.dst])
    }

    // ベルマン-フォード法による頂点Nのコスト導出
    // 始点ノードのコストを0にする
    nodes[0].distance = 0
    
    // 辺の緩和
    for (i in 1..N - 1) {
        for (e in edges) {
            val u = nodes[e.src]
            val v = nodes[e.dst]
            val w = e.cost
            if (u.distance == INF) {
                // 親の距離が無限大の場合計算するだけ無駄
                continue
            }
            if (v.distance > u.distance + w) {
                v.distance = u.distance + w
                v.parent = u
            }
        }
    }
    
    // 負の閉路チェック
    // 最後に閉路判定が出たノードから終点ノードへの到達可能判定をするため、
    // 閉路判定が出たノード一覧を取っておく
    val cycleNodes = mutableSetOf<Node>()
    for (e in edges) {
        val u = nodes[e.src]
        val v = nodes[e.dst]
        val w = e.cost
        
        if (u.distance == INF) {
            // 距離がINF -> 始点から到達不能のため考慮不要
            continue
        }
        
        if (u.distance + w < v.distance) {
            cycleNodes.add(u)
        }
    }
    while (true) {
        val tmp = cycleNodes.toSet()
        for (n in tmp) {
            cycleNodes.addAll(n.nextNodes)
        }
        if (cycleNodes.size == tmp.size) {
            break
        }
    }
    
    for (n in cycleNodes) {
        if (n.id == N - 1) {
            println(-1)
            return
        }
    }
    
    println(Math.max(nodes[N - 1].distance * -1, 0))
}

fun readInputLine(): String {
    return readLine()!!
}
