#include<bits/stdc++.h>
using namespace std;
struct R{int t,c;};
int n,m,ca,vis[2550];
long long d[2550];
bool inf[2550],inq[2550];
vector<R>v[2550];
queue<int>q;
int main()
{
	cin>>n>>m>>ca;
	for(int i=1,x,y,c;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&c);
		v[x].push_back({y,c-ca});
	}
	memset(d,-63,sizeof d);
	q.push(1);
	d[1]=0;
	while(!q.empty())
	{
		int x=q.front();
		inq[x]=0;
		q.pop();
		vis[x]++;
		if(vis[x]>n)inf[x]=1;
		for(int i=0;i<v[x].size();i++)
		{
			if(inf[x])
			{
				if(!inf[v[x][i].t])inf[v[x][i].t]=1,q.push(v[x][i].t);
			}
			else if(d[v[x][i].t]<d[x]+v[x][i].c)
			{
				d[v[x][i].t]=d[x]+v[x][i].c;
				if(!inq[v[x][i].t])
				{
					inq[v[x][i].t]=1;
					q.push(v[x][i].t);
				}
			}
		}
	}
	if(inf[n])printf("-1\n");
	else printf("%lld\n",max(0ll,d[n]));
}