/// spfa - muoii
/// spfa - vn.spoj.com/problems/NETACCEL/

#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 1003
#define maxc 207
#define oo 1000000007
#define mid ((l+r)>>1)
#define meset(a,x) memset(a,x,sizeof(a))
#define loop(x) for(int LoOpEr=x;LoOpEr-->0;)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int n,m,k;
struct neigh{ int ver; double wei; };
struct lala{ int ver,cost; };
vector<neigh> adj[maxn];
double d[maxn][17];
bool inq[maxn][17];
int pw2[17];

void spfa(int u)
{
    meset(inq,0);
    meset(d,127);
    pw2[0]=1;for(int i=1;i<17;i++) pw2[i]=pw2[i-1]<<1;

    queue<lala> Q;
    d[u][0]=0,Q.push({u,0}),inq[u][0]=1;

    int c;
    while (Q.size())
    {
        u=Q.front().ver;
        c=Q.front().cost;
        Q.pop(),inq[u][c]=false;

        for (const auto &e: adj[u])
        {
            int v=e.ver; double w=e.wei;

            for (int tmp=0;tmp<=k;tmp++)
            {
                double up=d[v][tmp];

                for (int div=0;div<=tmp;div++) up=min(up,d[u][tmp-div] + w/pw2[div]);

                if (up<d[v][tmp])
                {
                    d[v][tmp]=up;
                    if (!inq[v][tmp]) Q.push({v,tmp}),inq[v][tmp]=true;
                }
            }
        }
    }
}

int main()
{
    #ifdef dmdd
    freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
    #endif // dmdd
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    cin>>n>>m>>k;

    int x,y; double z;
    while(m-->0) cin>>x>>y>>z,adj[x].push_back({y,z}),adj[y].push_back({x,z});

    spfa(1);

    cout<<fixed<<setprecision(2);
    cout<<d[n][k]<<"\n";
    return 0;
}
