#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vii;
typedef vector<pll> vll;
typedef vector<vl> matrix;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define ff first
#define ss second
#define mp make_pair
const ll inf = 2e18;
const ll logi = 63;
static inline ll mul(ll a, ll b){
if(!a || !b) return 0;
__int128 x = __int128(a) * b;
return x >= inf ? inf : ll(x);
}
static inline ll add(ll a, ll b){
return min(a + b, inf);
}
matrix mnozenie(matrix& a, matrix& b){
int n = a.size();
matrix c(n, vl(n, 0));
for(int i = 0; i < n; i++){
for(int k = 0; k < n; k++){
if(!a[i][k]) continue;
for(int j = 0; j < n; j++){
if(!b[k][j]) continue;
c[i][j] = add(c[i][j], mul(a[i][k], b[k][j]));
}
}
}
return c;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n, m, k; cin >> n >> m >> k; k += n;
vector<matrix> dp(logi);
dp[0].assign(3 * n + 1, vl(3 * n + 1, 0));
for(int i = 0; i < n; i++){
dp[0][i + n][i] = 1;
dp[0][i + 2 * n][i + n] = 1;
dp[0][i][3 * n] = 1;
}
dp[0][3 * n][3 * n] = 1;
for(int i = 0; i < m; i++){
int a, b, c; cin >> a >> b >> c; a--; b--;
int przes = n * (c - 1);
dp[0][a][b + przes]++;
}
for(int i = 1; i < logi; i++){
dp[i] = mnozenie(dp[i - 1], dp[i - 1]);
}
ll czy = 0;
for(int i = 0; i < n; i++) czy = add(czy, dp[logi - 1][i][3 * n]);
if(czy < k){
cout << "-1\n"; return 0;
}
vl akt(3 * n + 1, 0); akt[3 * n] = 1;
ll wyn = 0;
for(int t = logi - 1; t >= 0; t--){
vl kand(3 * n + 1, 0);
for(int i = 0; i <= 3 * n; i++){
if(!akt[i]) continue;
for(int j = 0; j <= 3 * n; j++){
kand[j] = add(kand[j], mul(akt[i], dp[t][j][i]));
}
}
ll spr = 0;
for(int i = 0; i < n; i++) spr = add(spr, kand[i]);
if(spr < k){
akt = kand;
wyn += (1ll << t);
}
}
cout << wyn << "\n";
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmw7CnR5cGVkZWYgdmVjdG9yPHBpaT4gdmlpOwp0eXBlZGVmIHZlY3RvcjxwbGw+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8dmw+IG1hdHJpeDsKI2RlZmluZSBvcmRlcmVkX3NldCB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CiNkZWZpbmUgb3JkZXJlZF9tdWx0aXNldCB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCh4KS5lbmQoKQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgbXAgbWFrZV9wYWlyCgpjb25zdCBsbCBpbmYgPSAyZTE4Owpjb25zdCBsbCBsb2dpID0gNjM7CgpzdGF0aWMgaW5saW5lIGxsIG11bChsbCBhLCBsbCBiKXsKICAgIGlmKCFhIHx8ICFiKSByZXR1cm4gMDsKICAgIF9faW50MTI4IHggPSBfX2ludDEyOChhKSAqIGI7CiAgICByZXR1cm4geCA+PSBpbmYgPyBpbmYgOiBsbCh4KTsKfQoKc3RhdGljIGlubGluZSBsbCBhZGQobGwgYSwgbGwgYil7CiAgICByZXR1cm4gbWluKGEgKyBiLCBpbmYpOwp9CgptYXRyaXggbW5vemVuaWUobWF0cml4JiBhLCBtYXRyaXgmIGIpewogICAgaW50IG4gPSBhLnNpemUoKTsKICAgIG1hdHJpeCBjKG4sIHZsKG4sIDApKTsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKICAgICAgICBmb3IoaW50IGsgPSAwOyBrIDwgbjsgaysrKXsKICAgICAgICAgICAgaWYoIWFbaV1ba10pIGNvbnRpbnVlOwogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbjsgaisrKXsKICAgICAgICAgICAgICAgIGlmKCFiW2tdW2pdKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGNbaV1bal0gPSBhZGQoY1tpXVtqXSwgbXVsKGFbaV1ba10sIGJba11bal0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYzsKfQoKCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBsbCBuLCBtLCBrOyBjaW4gPj4gbiA+PiBtID4+IGs7IGsgKz0gbjsKCiAgICB2ZWN0b3I8bWF0cml4PiBkcChsb2dpKTsKICAgIGRwWzBdLmFzc2lnbigzICogbiArIDEsIHZsKDMgKiBuICsgMSwgMCkpOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewogICAgICAgIGRwWzBdW2kgKyBuXVtpXSA9IDE7CiAgICAgICAgZHBbMF1baSArIDIgKiBuXVtpICsgbl0gPSAxOwogICAgICAgIGRwWzBdW2ldWzMgKiBuXSA9IDE7CiAgICB9CiAgICBkcFswXVszICogbl1bMyAqIG5dID0gMTsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgICBpbnQgYSwgYiwgYzsgY2luID4+IGEgPj4gYiA+PiBjOyBhLS07IGItLTsKICAgICAgICBpbnQgcHJ6ZXMgPSBuICogKGMgLSAxKTsKICAgICAgICBkcFswXVthXVtiICsgcHJ6ZXNdKys7CiAgICB9CgogICAgZm9yKGludCBpID0gMTsgaSA8IGxvZ2k7IGkrKyl7CiAgICAgICAgZHBbaV0gPSBtbm96ZW5pZShkcFtpIC0gMV0sIGRwW2kgLSAxXSk7CiAgICB9CgogICAgbGwgY3p5ID0gMDsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGN6eSA9IGFkZChjenksIGRwW2xvZ2kgLSAxXVtpXVszICogbl0pOwogICAgaWYoY3p5IDwgayl7CiAgICAgICAgY291dCA8PCAiLTFcbiI7IHJldHVybiAwOwogICAgfQoKICAgIHZsIGFrdCgzICogbiArIDEsIDApOyBha3RbMyAqIG5dID0gMTsKICAgIGxsIHd5biA9IDA7CiAgICBmb3IoaW50IHQgPSBsb2dpIC0gMTsgdCA+PSAwOyB0LS0pewogICAgICAgIHZsIGthbmQoMyAqIG4gKyAxLCAwKTsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDw9IDMgKiBuOyBpKyspewogICAgICAgICAgICBpZighYWt0W2ldKSBjb250aW51ZTsKICAgICAgICAgICAgZm9yKGludCBqID0gMDsgaiA8PSAzICogbjsgaisrKXsKICAgICAgICAgICAgICAgIGthbmRbal0gPSBhZGQoa2FuZFtqXSwgbXVsKGFrdFtpXSwgZHBbdF1bal1baV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsbCBzcHIgPSAwOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHNwciA9IGFkZChzcHIsIGthbmRbaV0pOwogICAgICAgIGlmKHNwciA8IGspewogICAgICAgICAgICBha3QgPSBrYW5kOwogICAgICAgICAgICB3eW4gKz0gKDFsbCA8PCB0KTsKICAgICAgICB9CiAgICB9CgoKICAgIGNvdXQgPDwgd3luIDw8ICJcbiI7CgogICAgcmV0dXJuIDA7Cn0K