#include <iostream>
#include <cmath>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <set>
#include <algorithm>
#include <iomanip>
#include <string.h>

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define ALL(a)  (a).begin(),(a).end()

typedef long long lint;

using namespace std;

int main(){
  int N,M,P;
  cin>>N>>M>>P;
  // vector<pair<int,int> > c[N];
  // REP(i,M){
  //   int A,B,C;
  //   cin>>A>>B>>C;
  //   A--;
  //   B--;
  //   C-=P;
  //   c[A].push_back(make_pair(B,C));
  // }
  int A[M],B[M],C[M];
  REP(i,M){
    cin>>A[i]>>B[i]>>C[i];
    A[i]--;
    B[i]--;
    C[i]-=P;
  }
  lint d[N];
  REP(i,N)d[i]=-1e12;
  d[0]=0;
  REP(i,N+1){
    REP(m,M){
      if(d[B[m]]<d[A[m]]+C[m]){
        d[B[m]]=d[A[m]]+C[m];
      }
    }
  }
  lint temp=d[N-1];
  REP(i,N+1){
    REP(m,M){
      if(d[B[m]]<d[A[m]]+C[m]){
        d[B[m]]=d[A[m]]+C[m];
      }
    }
  }
  if(d[N-1]>temp){
    cout<<-1<<endl;
    return 0;
  }
  cout<<max((lint)0,d[N-1])<<endl;
  return 0;
}
