#include <bits/stdc++.h>
using namespace std;
const int INF = 0x7f7f7f7f;
int src, snk, nNode, nEdge;
int Q[55 + 5], fin[55 + 5], pro[55 + 5], dist[55 + 5];
int flow[2 * 5000 + 5], cap[2 * 5000 + 5], nxt[2 * 5000 + 5], to[2 * 5000 + 5];
void init(int _src, int _snk, int _n) {
  src = _src, snk = _snk, nNode = _n, nEdge = 0;
  memset(fin, -1, sizeof(fin));
}
void add_edge(int u, int v, int c) {
  to[nEdge] = v, cap[nEdge] = c, flow[nEdge] = 0, nxt[nEdge] = fin[u],
  fin[u] = nEdge++;
  to[nEdge] = u, cap[nEdge] = 0, flow[nEdge] = 0, nxt[nEdge] = fin[v],
  fin[v] = nEdge++;
  assert(nEdge <= 2 * 5000);
}
bool bfs() {
  int st, en, i, u, v;
  memset(dist, -1, sizeof(dist));
  dist[src] = st = en = 0;
  Q[en++] = src;
  while (st < en) {
    u = Q[st++];
    for (i = fin[u]; i >= 0; i = nxt[i]) {
      v = to[i];
      if (flow[i] < cap[i] && dist[v] == -1) {
        dist[v] = dist[u] + 1;
        Q[en++] = v;
      }
    }
  }
  return dist[snk] != -1;
}
int dfs(int u, int fl) {
  if (u == snk) return fl;
  for (int &e = pro[u], v, df; e >= 0; e = nxt[e]) {
    v = to[e];
    if (flow[e] < cap[e] && dist[v] == dist[u] + 1) {
      df = dfs(v, min(cap[e] - flow[e], fl));
      if (df > 0) {
        flow[e] += df;
        flow[e ^ 1] -= df;
        return df;
      }
    }
  }
  return 0;
}
long long int dinitz() {
  long long int ret = 0;
  int df;
  while (bfs()) {
    for (int i = 1; i <= nNode; i++) pro[i] = fin[i];
    while (true) {
      df = dfs(src, INF);
      if (df)
        ret += (long long int)df;
      else
        break;
    }
  }
  return ret;
}
vector<pair<int, int> > edge[50 + 5];
int n;
int max_bear(double w) {
  int i, j;
  src = 1;
  snk = n;
  init(src, snk, snk);
  for (i = 1; i <= n; i++)
    for (auto x : edge[i]) add_edge(i, x.first, (int)(x.second / w));
  return dinitz();
}
int main() {
  int i, j, k, m, x;
  int u, v, w;
  scanf("%d %d %d", &n, &m, &x);
  for (i = 1; i <= m; i++) {
    scanf("%d %d %d", &u, &v, &w);
    edge[u].push_back(make_pair(v, w));
  }
  double lo = 1.00 / x, hi = 100000000.00, mid;
  for (i = 1; i <= 300; i++) {
    mid = (lo + hi) / 2.00;
    if (max_bear(mid) >= x)
      lo = mid;
    else
      hi = mid;
  }
  printf("%0.9f\n", mid * x);
  return 0;
}
