#include <iostream>
#include <string.h>
#include <queue>
#include <map>
#include <vector>
using namespace std;
struct E{
long long int len,cost,oldLen;
int to;
bool operator<(const E& e1)const{
if(len!=e1.len)return len>e1.len;
return cost>e1.cost;
}
};
long long int lens[100003];
bool flag[100003];
map<long long int,long long int> memo;
map<int,vector<E> > cons;
priority_queue<E> pq;
int main() {
// your code goes here
int n,m;
long long int c1,allSum;
cin>>n>>m>>c1;
for(int i=0;i<m;i++){
E e;
int from;
long long int to,len;
cin>>from>>to>>len;
e.to=to;
e.len=len;
e.cost=e.len;
cons[from].push_back(e);
e.to=from;
cons[to].push_back(e);
allSum+=len;
}
for(int i=1;i<=n;i++){
flag[i]=false;
}
E e1;
e1.to=1;
e1.len=0;
e1.oldLen=0;
e1.cost=0;
pq.push(e1);
while(pq.size()>0){
E e1=pq.top();
pq.pop();
cout<<"("<<e1.to<<" "<<e1.len<<" "<<e1.cost<<")";
if(flag[e1.to]==false){
flag[e1.to]=true;
lens[e1.len]+=e1.cost;
memo[e1.len]=e1.cost;
}else{
memo[e1.len]+=e1.cost;
continue;
}
for(auto it=cons[e1.to].begin();it!=cons[e1.to].end();it++){
E e2=(*it);
E e1a;
e1a.to=e2.to;
e1a.oldLen=e1.len;
e1a.len=e1.len+e2.cost;
e1a.cost=e2.cost;
pq.push(e1a);
}
}
long long int ans=allSum;
allSum=0;
for(auto it=memo.begin();it!=memo.end();it++){
allSum+=(*it).second;
}
long long int lenSum=0;
for(auto it=memo.begin();it!=memo.end();it++){
//cout<<(*it).first<<" "<<(*it).second<<endl;
allSum-=(*it).second;
long long int t1=(*it).first*c1+allSum;
cout<<(*it).first<<" "<<(*it).second<<endl;
if(t1<ans)ans=t1;
}
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBFewoJbG9uZyBsb25nIGludCBsZW4sY29zdCxvbGRMZW47CglpbnQgdG87CgkKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IEUmIGUxKWNvbnN0ewoJCWlmKGxlbiE9ZTEubGVuKXJldHVybiBsZW4+ZTEubGVuOwoJCXJldHVybiBjb3N0PmUxLmNvc3Q7Cgl9Cn07Cgpsb25nIGxvbmcgaW50IGxlbnNbMTAwMDAzXTsKYm9vbCBmbGFnWzEwMDAwM107Cm1hcDxsb25nIGxvbmcgaW50LGxvbmcgbG9uZyBpbnQ+IG1lbW87Cm1hcDxpbnQsdmVjdG9yPEU+ID4gY29uczsKcHJpb3JpdHlfcXVldWU8RT4gcHE7CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWludCBuLG07Cglsb25nIGxvbmcgaW50IGMxLGFsbFN1bTsKCWNpbj4+bj4+bT4+YzE7CgkKCWZvcihpbnQgaT0wO2k8bTtpKyspewoJCUUgZTsKCQlpbnQgZnJvbTsKCQlsb25nIGxvbmcgaW50IHRvLGxlbjsKCQljaW4+PmZyb20+PnRvPj5sZW47CgkJZS50bz10bzsKCQllLmxlbj1sZW47CgkJZS5jb3N0PWUubGVuOwoJCWNvbnNbZnJvbV0ucHVzaF9iYWNrKGUpOwoJCWUudG89ZnJvbTsKCQljb25zW3RvXS5wdXNoX2JhY2soZSk7CgkJYWxsU3VtKz1sZW47Cgl9Cglmb3IoaW50IGk9MTtpPD1uO2krKyl7CgkJZmxhZ1tpXT1mYWxzZTsKCX0KCQoJRSBlMTsKCWUxLnRvPTE7CgllMS5sZW49MDsKCWUxLm9sZExlbj0wOwoJZTEuY29zdD0wOwoJcHEucHVzaChlMSk7Cgl3aGlsZShwcS5zaXplKCk+MCl7CgkJRSBlMT1wcS50b3AoKTsKCQlwcS5wb3AoKTsKCQljb3V0PDwiKCI8PGUxLnRvPDwiICI8PGUxLmxlbjw8IiAiPDxlMS5jb3N0PDwiKSI7IAoJCWlmKGZsYWdbZTEudG9dPT1mYWxzZSl7CgkJCWZsYWdbZTEudG9dPXRydWU7CgkJCWxlbnNbZTEubGVuXSs9ZTEuY29zdDsKCQkJbWVtb1tlMS5sZW5dPWUxLmNvc3Q7CgkJfWVsc2V7CgkJCW1lbW9bZTEubGVuXSs9ZTEuY29zdDsKCQkJY29udGludWU7CgkJfQoJCQoJCWZvcihhdXRvIGl0PWNvbnNbZTEudG9dLmJlZ2luKCk7aXQhPWNvbnNbZTEudG9dLmVuZCgpO2l0KyspewoJCQlFIGUyPSgqaXQpOwoJCQlFIGUxYTsKCQkJZTFhLnRvPWUyLnRvOwoJCQllMWEub2xkTGVuPWUxLmxlbjsKCQkJZTFhLmxlbj1lMS5sZW4rZTIuY29zdDsKCQkJZTFhLmNvc3Q9ZTIuY29zdDsKCQkJcHEucHVzaChlMWEpOwoJCX0KCX0KCWxvbmcgbG9uZyBpbnQgYW5zPWFsbFN1bTsKCWFsbFN1bT0wOwoJZm9yKGF1dG8gaXQ9bWVtby5iZWdpbigpO2l0IT1tZW1vLmVuZCgpO2l0KyspewoJCWFsbFN1bSs9KCppdCkuc2Vjb25kOwoJfQoJbG9uZyBsb25nIGludCBsZW5TdW09MDsKCWZvcihhdXRvIGl0PW1lbW8uYmVnaW4oKTtpdCE9bWVtby5lbmQoKTtpdCsrKXsKCQkvL2NvdXQ8PCgqaXQpLmZpcnN0PDwiICI8PCgqaXQpLnNlY29uZDw8ZW5kbDsKCQlhbGxTdW0tPSgqaXQpLnNlY29uZDsKCQlsb25nIGxvbmcgaW50IHQxPSgqaXQpLmZpcnN0KmMxK2FsbFN1bTsKCQljb3V0PDwoKml0KS5maXJzdDw8IiAiPDwoKml0KS5zZWNvbmQ8PGVuZGw7CgkJaWYodDE8YW5zKWFucz10MTsKCX0KCWNvdXQ8PGFuczw8ZW5kbDsKCXJldHVybiAwOwp9