#include <bits/stdc++.h>
using namespace std;
const int inf = (1 << 30) - 1;
const long long linf = (1ll << 62) - 1;
const int N = 1e6 + 100;
namespace flow {
int n, m = 0;
int a[N], b[N], f[N], cf[N];
vector<int> g[N];
void addEdge(int u, int v, int flow) {
  a[m] = u, b[m] = v, f[m] = 0, cf[m] = flow, g[a[m]].push_back(m), m++;
  a[m] = v, b[m] = u, f[m] = 0, cf[m] = 0, g[b[m]].push_back(m), m++;
}
void clear() {
  for (int i = 0; i < m; i++) {
    f[i] = cf[i] = 0;
  }
}
int dist[N], parent[N], parentEdge[N];
int q[N], l = 0, r = 0;
inline int bfs() {
  fill_n(dist, n, inf);
  dist[0] = 0;
  l = r = 0;
  q[r++] = 0;
  while (r != l) {
    int v = q[l++];
    for (int e : g[v]) {
      if (cf[e] <= 0) {
        continue;
      }
      int to = b[e];
      if (dist[to] > dist[v] + 1) {
        dist[to] = dist[v] + 1;
        parent[to] = v;
        parentEdge[to] = e;
        q[r++] = to;
      }
    }
  }
  if (dist[n - 1] >= inf) {
    return 0;
  }
  int flow = inf;
  int v = n - 1;
  while (v != 0) {
    flow = min(flow, cf[parentEdge[v]]);
    v = parent[v];
  }
  v = n - 1;
  while (v != 0) {
    cf[parentEdge[v]] -= flow, cf[parentEdge[v] ^ 1] += flow;
    v = parent[v];
  }
  return flow;
}
inline int flow() {
  int ans = 0;
  for (;;) {
    int add = bfs();
    if (add == 0) {
      break;
    }
    ans += add;
  }
  return ans;
}
}  // namespace flow
int n, m, x;
int a[N], b[N], c[N];
int main() {
  cin >> n >> m >> x;
  for (int i = 0; i < m; i++) {
    cin >> a[i] >> b[i] >> c[i];
    a[i]--, b[i]--;
  }
  flow::n = n;
  for (int i = 0; i < m; i++) {
    flow::addEdge(a[i], b[i], 0);
  }
  long double l = 0, r = 1e9;
  for (int it = 0; it < 200; it++) {
    long double d = (l + r) / 2;
    flow::clear();
    for (int i = 0; i < m; i++) {
      flow::cf[i * 2] = (int)min((c[i] / d), (long double)1e9);
    }
    if (flow::flow() >= x) {
      l = d;
    } else {
      r = d;
    }
  }
  cout.precision(20);
  cout << fixed << r * x << endl;
  return 0;
}
