#include<bits/stdc++.h>
using namespace std;
int n,m,p;
int vis[2525],can[2525],dis[2525];
struct node {
	int u,v,w;
} e[5005];
vector<int>G[2525],Q[2525];
void dfs1(int x) {
	vis[x]=1;
	for(unsigned i=0; i<G[x].size(); i++) {
		if(!vis[G[x][i]])dfs1(G[x][i]);
	}
}
void dfs2(int x){
	can[x]=1;
	for(unsigned i=0; i<Q[x].size(); i++) {
		if(!can[Q[x][i]])dfs2(Q[x][i]);
	}
}
long long bellman_ford() {
	memset(dis,-125,sizeof(dis));
	dis[1]=0;
	for(int i=1; i<=n; i++) {
		p=0;
		for(int j=1; j<=m; j++)
		if(dis[e[j].u]+e[j].w>dis[e[j].v]&&vis[e[j].u]&&vis[e[j].v])dis[e[j].v]=dis[e[j].u]+e[j].w,p=1;
		if(!p)break;
		if(i==n)return -1;
	}
	return max(0,dis[n]);
}
int main() {
	scanf("%d%d%d",&n,&m,&p);
	for(int i=1; i<=m; i++) {
		scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);e[i].w-=p;
		G[e[i].u].push_back(e[i].v);Q[e[i].v].push_back(e[i].u);
	}
	dfs2(n),dfs1(1);
	for(int i=1; i<=n; i++)vis[i]&=can[i];
	printf("%lld",bellman_ford());
}