#include <stdio.h>
#include <queue>
#include <utility>
#include <vector>
#include <bitset>
#include <algorithm>
using namespace std;
typedef pair<int,int> pi;
typedef pair<long long int,int> pli;
#define F first
#define S second
#define PB push_back
const int N=1e5+10;
const long long int INF=1LL<<60;
int main(){
    int n,m,c,l,r,d;
    long long int ans=INF,tot=0,temp;
    pli dis[N],nxt;
    priority_queue<pli,vector<pli>,greater<pli>>pq;
    bitset<N> went;
    vector<pi> graph[N];
    scanf("%d%d%d",&n,&m,&c);
    went.reset();
    dis[1]={0,1};
    for(int i=2;i<=n;i++)dis[i]={INF,i};
    while(m--){
        scanf("%d%d%d",&l,&r,&d);
        graph[l].PB({r,d});
        graph[r].PB({l,d});
        tot+=d;
    }
    pq.push({0,1});
    while(!pq.empty()){
        nxt=pq.top();
        pq.pop();
        if(nxt.F<=dis[nxt.S].F)for(pi i:graph[nxt.S])if(dis[i.F].F>nxt.F+i.S){
            dis[i.F].F=nxt.F+i.S;
            pq.push(dis[i.F]);
        }
    }
    sort(dis+1,dis+1+n);
    for(int i=1;i<=n;i++){
        temp=dis[i].F*c;
        went[dis[i].S]=true;
        for(pi j:graph[dis[i].S])if(went[j.F])tot-=j.S;
        ans=min(ans,temp+tot);
    }
    printf("%lld\n",ans);
}
