#include <iostream>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#define rep(i,j,k) for(int i=j;i<k;i++)
using namespace std;
const int maxn=1100,inf=999999999;
int e[maxn][maxn],dis[maxn],vis[maxn];
int main(){
int n,m,k,t,d,p,q;
string a,b;
cin>>n>>m>>k>>t;
fill(e[0],e[0]+maxn*maxn,inf);
fill(dis,dis+maxn,inf);
rep(i,0,k){
cin>>a>>b>>d;
if(a[0]=='G'){
a=a.substr(1);
p = stoi(a)+n;
}else p = stoi(a);
if(b[0]=='G'){
b=b.substr(1);
q = stoi(b)+n;
}else q = stoi(b);
e[p][q]=e[q][p]=d;
}
double ansdis=-1,ansavg=inf;
int ansid = -1;
rep(index,n+1,n+m+1){
double mindis=inf,avg=0;
fill(dis,dis+maxn,inf);
fill(vis,vis+maxn,0);
dis[index]=0;
rep(i,0,n+m){
int u=-1,minn=inf;
rep(j,1,n+m+1){
if(vis[j]==0 && minn>dis[j]){
u = j;
minn = dis[j];
}
}
if(u==-1) break;
vis[u] = 1;
rep(v,1,n+m+1){
if(vis[v]==0 && dis[v] > dis[u]+e[u][v])
dis[v]=dis[u]+e[u][v];
}
}
rep(i,1,n+1){
if(dis[i]>t){
mindis=-1;
break;
}
if(mindis>dis[i])
mindis = dis[i];
avg += 1.0 * dis[i];
}
if(mindis==-1) continue;
avg /= n;
if(ansdis<mindis){
ansdis = mindis;
ansid=index;
ansavg = avg;
}else if(ansdis==mindis && ansavg > avg){
ansid=index;
ansavg = avg;
}
}
if(ansid==-1)
printf("No Solution");
else
printf("G%d\n%.1f %.1f",ansid-n,ansdis,ansavg);
return 0;
}