#include using namespace std; typedef long long LL; const int MOD = 998244353; const int N = 205; LL power(LL x, LL y) { LL ret = 1; for ( ; y; y >>= 1) { if (y & 1) ret = ret * x % MOD; x = x * x % MOD; } return ret; } int n, m, nn, K; vector < pair > E[N]; int tr[N][N], ans[N][N], tmp[N][N]; void mul(int a[N][N], int b[N][N]) { for (int i = 1; i <= nn; i++) for (int j = 1; j <= nn; j++) tmp[i][j] = 0; for (int i =1 ; i <= nn; i++) for (int j = 1; j <= nn; j++) for (int k = 1; k <= nn; k++) tmp[i][k] = (tmp[i][k] + (LL)a[i][j] * b[j][k]) % MOD; for (int i = 1; i <= nn; i++) for (int j = 1; j <= nn; j++) a[i][j] = tmp[i][j]; } void work() { scanf("%d%d%d", &n, &m, &K); nn = 2 * n; for (int i = 1; i <= n; i++) E[i].clear(); for (int i = 1; i <= m; i++) { int u, v, w; scanf("%d%d%d", &u, &v, &w); E[u].push_back({v, w}); E[v].push_back({u, w}); } for (int i = 1; i <= nn; i++) for (int j = 1; j <= nn; j++) tr[i][j] = 0; for (int i = 1; i <= n; i++) { int no = (i << 1) - 1, yes = i << 1; int deg = E[i].size(); if (!deg) continue; int inv = power(deg, MOD - 2); for (auto v : E[i]) { int j = (v.first << 1) - 1, k = v.second; tr[no][j + k] = inv; tr[yes][j + (k ^ 1)] = inv; } } for (int i = 1; i <= nn; i++) for (int j = 1; j <= nn; j++) ans[i][j] = 0; ans[1][1] = 1; for ( ; K; K >>= 1) { if (K & 1) mul(ans, tr); mul(tr, tr); } int tot = 0; for (int i = 1; i <= nn; i++) { tot += ans[1][i]; tot %= MOD; } printf("%d\n", int (ans[1][nn] * power(tot, MOD - 2) % MOD)); } int main() { int T; scanf("%d", &T); while (T--) work(); }