#include <bits/stdc++.h>
using namespace std;
int n, m, r, f[55], v[2005], o[2005], a[2005], b[2005], c[2005], w[2005], p;
int S, T, d[55], q[55], fl;
void bd(int a, int b, int c, int d) {
  v[++p] = b;
  o[p] = f[a];
  f[a] = p;
  w[p] = c;
  v[++p] = a;
  o[p] = f[b];
  f[b] = p;
  w[p] = d;
}
int dfs(int x, int y) {
  if (x == T) {
    fl += y;
    return y;
  }
  int cap = y;
  for (int i = (f[x]); i; i = o[i])
    if (w[i] && d[v[i]] == d[x] + 1) {
      int tt = dfs(v[i], min(cap, w[i]));
      w[i] -= tt;
      cap -= tt;
      w[i ^ 1] += tt;
    }
  if (cap == y) d[x] = -1;
  return y - cap;
}
bool bfs() {
  for (int i = (0); i <= (T); i++) d[i] = -1;
  d[S] = 0;
  int l = 0, h = 0;
  q[h++] = S;
  while (l < h) {
    int y = q[l++];
    for (int i = (f[y]); i; i = o[i])
      if (w[i] && d[v[i]] < 0) {
        d[v[i]] = d[y] + 1;
        q[h++] = v[i];
        if (v[i] == T) return 1;
      }
  }
  return 0;
}
bool ok(double lim) {
  S = 0;
  T = n + 1;
  for (int i = (0); i <= (T); i++) f[i] = 0;
  p = 1;
  for (int i = (0); i < (m); i++) {
    int e = (int)floor(min(1e6, (double)c[i] / lim)) + 1e-12;
    bd(a[i], b[i], e, 0);
  }
  bd(n, T, r, 0);
  bd(S, 1, r, 0);
  fl = 0;
  while (bfs())
    while (dfs(S, r))
      ;
  return fl == r;
}
int main() {
  scanf("%d %d %d", &n, &m, &r);
  for (int i = (0); i < (m); i++) scanf("%d %d %d", &a[i], &b[i], &c[i]);
  double lo = 1e-6, hi = 1000001;
  for (int z = (1); z <= (100); z++) {
    double mid = (lo + hi) / 2;
    if (ok(mid))
      lo = mid;
    else
      hi = mid;
  }
  printf("%.6lf\n", lo * r);
  scanf("\n");
}
