#include <bits/stdc++.h>
using namespace std;

#define ii pair<int, int>
#define iii pair<double, pair<int, int>>
#define fi first
#define se second
const int MAXN = 1e5+5;
const int MAXK = 12;
const double INF = 1e18;
int n, m, k, x, y, c;
vector<ii> a[MAXN];

double dist[MAXN][MAXK];
void dijk(int s)
{
    for ( int i = 1; i <= n; i++ )
        for ( int j = 0; j <= k; j++ )
            dist[i][j] = INF;
    priority_queue<iii, vector<iii>, greater<iii>> q;
    dist[s][0] = 0;
    q.push({0.0, {0, s}});
    while (!q.empty())
    {
        double cost = q.top().fi;
        int K = q.top().se.fi, u = q.top().se.se;
        q.pop();
        if ( u == n )
        {
            cout << fixed << setprecision(2) << cost;
            exit(0);
        }
        if ( cost > dist[u][K] ) continue;
        for ( ii e : a[u] )
        {
            double vcost = e.se;
            int v = e.fi;
            int power2 = 1;
            for ( int i = 0; K + i <= k; i++ )
            {
                if ( cost + vcost/power2 < dist[v][K+i] )
                {
                    dist[v][K+i] = cost + vcost/power2;
                    q.push({dist[v][K+i], {K+i, v}});
                }
                power2*=2;
            }
        }
    }
}

int main()
{
    ios::sync_with_stdio(0); cin.tie(0);
    cin >> n >> m >> k;
    for ( int i = 1; i <= m; i++ )
    {
        cin >> x >> y >> c;
        a[x].push_back({y, c});
        a[y].push_back({x, c});
    }
    dijk(1);
  return 0;
}
