#include<bits/stdc++.h>
using namespace std;
int n,m,k;
struct node{
int v,a;
};
vector<node>a[20001];
int ans,val[20001],mn=INT_MAX;
void dfs(int now,int x){
ans=now;
if(val[x]){
return ;
}else if(x==n&&ans%k==0){
mn=min(mn,ans);
return ;
}
for(int i=1;i<=n;i++){
int len=a[i].size();
for(int j=0;j<len;j++){
val[x]=1;
if(a[x][j].a<=now){
dfs(now+1,a[x][j].v);
}
val[x]=0;
}
}
}
int main(){
cin>>n>>m>>k;
int u,v,a1;
for(int i=1;i<=n;i++){
cin>>u>>v>>a1;
a[u].push_back({v,a1});
}
dfs(k,1);
cout<<mn;
return 0;
}