import heapq
n, m, k, maxD = map(int, input().split())
g = [[] for _ in range(n + m + 10)]
transform = lambda x: x + n
for _ in range(k):
u, v, w = input().split()
w = int(w)
if u[0] == 'G':
u = transform(int(u[-1]))
if v[0] == 'G':
v = transform(int(v[-1]))
u, v = int(u), int(v)
g[u].append((v, w))
g[v].append((u, w))
def dijkstra(i):
global maxD
q = []
dist = [float('inf')] * (n + m + 10)
dist[i] = 0
st = [False for _ in range(n + m + 10)]
heapq.heappush(q, (0, i))
while q:
u = heapq.heappop(q)[1]
if st[u]: continue
st[u] = True
for v, w in g[u]:
if st[v]: continue
dist[v] = min(dist[v], dist[u] + w)
# if dist[v] > maxD:
# return None
heapq.heappush(q, (dist[v],