#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
using namespace std;
const int inf=2100000000;
int N,M,K,DS;
int g[1050][1050];
void init()
{
fill(g[0],g[0]+1050*1050,inf);//
}
int dis[1050];
int book[1050];
void dijk(int st)
{
dis[st]=0;
book[st]=1;
for(int i=1;i<=N+M;i++)
{
if(g[st][i]!=inf)
dis[i]=g[st][i];
}
for(int i=0;i<N+M-1;i++)
{
int u=-1,minn=inf;
for(int j=1;j<=N+M;j++)
{
if(book[j]==0&&dis[j]<minn)
{
minn=dis[j];
u=j;
}
}
if(u==-1)
return;
book[u]=1;
for(int v=1;v<=N+M;v++)
{
if(book[v]==0&&g[u][v]!=inf)
{
if(dis[u]+g[u][v]<dis[v])
{
dis[v]=dis[u]+g[u][v];
}
}
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d %d %d %d",&N,&M,&K,&DS);
init();
for(int i=0;i<K;i++)
{
char s1[5],s2[5];
int t1,t2,t;
scanf("%s %s %d",s1,s2,&t);
if(isdigit(s1[0]))
{
sscanf(s1,"%d",&t1);
}
else
{
sscanf(s1+1,"%d",&t1);
t1+=N;
}
if(isdigit(s2[0]))
{
sscanf(s2,"%d",&t2);
}
else
{
sscanf(s2+1,"%d",&t2);
t2+=N;
}
g[t1][t2]=t;
g[t2][t1]=t;
}
int ans1=-1;
int ans2=-1;
double ans3;
for(int i=N+M;i>=N+1;i--)
{
fill(dis,dis+1050,inf);
memset(book,0,sizeof(book));
dijk(i);
sort(dis+1,dis+1+N);
int minn=dis[1];
int maxx=dis[N];
double sum=0;
for(int j=1;j<=N;j++)
sum+=dis[j];
if(maxx>DS)
continue;
if(minn>ans2 || (minn==ans2&&sum<=ans3) )
{
ans1=i-N;
ans2=minn;
ans3=sum;
}
}
if(ans1==-1)
printf("No Solution");
else
{
printf("G%d\n",ans1);
printf("%.1f %.1f",(double)ans2,(double)ans3/N);
}
return 0;
}