#include <bits/stdc++.h>
    #define hell                         1000000007 
    #define M                            1000000007
    #define Maxi                      10000000000000000
        #define lcm(a,b)                     (a*b)/__gcd(a,b)
        #define ll                           long long

        #define vll                          vector<ll>
        #define vi                           vector<long long>
        #define pll                          vector< pair<ll,ll> >
        #define pb                           push_back
        //#define mp                           make_pair
        #define all(v)                       v.begin(),v.end()
        #define lbnd                         lower_bound
        #define ubnd                         upper_bound
        #define bs                           binary_search
        #define F                            first
        #define S                            second
        #define rep(i,a,b)                   for(i=a;i<b;i++)
        #define parr(a,n)                    for(i=0;i<n;i++) cout<<a[i]<<" ";cout<<endl;
        #define pcont(a)                     for(auto i:a) cout<<i<<" ";cout<<endl;
        #define ret(x)                       return cout<<x,0;
        #define dbg(x)                       cout << #x << " is " << x << endl;
        //#define endl                           '\n'
     
     
        // Debug //
     
        #define trace(x)                 cerr << #x << ": " << x << endl;
        #define trace1(x)                cerr << #x << ": " << x << endl;
        #define trace2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
        #define trace3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
        #define trace4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
        #define trace5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
        #define trace6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;


    using namespace std;
    vector<ll>v[2504];
    int main()
    {

          ios_base::sync_with_stdio(false);
          cin.tie(NULL);cout.tie(NULL);
        
          ll n,m,p;
          cin>>n>>m>>p;
          vector<pair<ll,pair<ll,ll>>>v1;
          ll i,j;
          rep(i,0,m)
          {
            ll u,v,w;
            cin>>u>>v>>w;
            v1.pb({u,{v,-w+p}});
          }

          ll dis[n+1];
          for(i=1;i<=n;i++)
          {
            dis[i]=INT_MAX;
          }
          dis[1]=0;
          for(j=1;j<=2*n;j++)
          {
          for(i=0;i<m;i++)
          {
            ll u,v,w;
            u=v1[i].F;
            v=v1[i].S.F;
            w=v1[i].S.S;
            if(dis[u]==INT_MAX)
                continue;

            if(dis[u]!=INT_MAX && dis[v]>dis[u]+w)
            {
              dis[v]=dis[u]+w;
              if(j>=n)
              {
                dis[v]=INT_MIN;
              }
            }

          }
        }
        ll val;
        val=dis[n];

          ll val2;
          val2=dis[n];
          //cout<<dis[n]<<endl;
          if(dis[n]==INT_MIN)
          {
            cout<<-1<<endl;
          }
          else
          {
            cout<<max(dis[n]*-1,0LL)<<endl;
          }

  
  return 0;
}


          

  

Measured memory_bytes: 640