import
os
import
sys
from
heapq
import
heappop, heappush
import
numpy as np
def
solve(inp):
n, m, k, l
=
inp[:
4
]
aaa
=
inp[
4
:
4
+
n]
bbb
=
inp[
4
+
n:
4
+
n
+
l]
-
1
uuu
=
inp[
4
+
n
+
l::
3
]
-
1
vvv
=
inp[
5
+
n
+
l::
3
]
-
1
ccc
=
inp[
6
+
n
+
l::
3
]
tuple_list
=
[(n, n)]
tuple_list.clear()
links
=
[tuple_list.copy()
for
_
in
range
(n)]
for
i
in
range
(m):
u
=
uuu[i]
v
=
vvv[i]
c
=
ccc[i]
links[u].append((v, c))
links[v].append((u, c))
def
update(dist, nc, na):
if
dist[
0
][
1
]
=
=
na:
if
dist[
0
][
0
] > nc:
dist[
0
][
0
]
=
nc
return
True
elif
dist[
1
][
1
]
=
=
na:
if
dist[
1
][
0
] > nc:
if
dist[
0
][
0
] <
=
nc:
dist[
1
][
0
]
=
nc
else
:
dist[
1
][
0
]
=
dist[
0
][
0
]
dist[
1
][
1
]
=
dist[
0
][
1
]
dist[
0
][
0
]
=
nc
dist[
0
][
1
]
=
na
return
True
elif
dist[
1
][
0
] > nc:
if
dist[
0
][
0
] <
=
nc:
dist[
1
][
0
]
=
nc
dist[
1
][
1
]
=
na
else
:
dist[
1
][
0
]
=
dist[
0
][
0
]
dist[
1
][
1
]
=
dist[
0
][
1
]
dist[
0
][
0
]
=
nc
dist[
0
][
1
]
=
na
return
True
return
False
def
check_necessity(distances, cost, u, a):
if
distances[u,
0
,
0
]
=
=
cost
and
distances[u,
0
,
1
]
=
=
a:
return
True
if
distances[u,
1
,
0
]
=
=
cost
and
distances[u,
1
,
1
]
=
=
a:
return
True
return
False
INF
=
1
<<
60
distances
=
np.full((n,
2
,
2
), INF, np.int64)
q
=
[(n, n, n)]
q.clear()
for
b
in
bbb:
a
=
aaa[b]
update(distances[b],
0
, a)
q.append((
0
, b, a))
while
q:
cost, u, a
=
heappop(q)
if
not
check_necessity(distances, cost, u, a):
continue
for
v, c
in
links[u]:
nc
=
cost
+
c
if
update(distances[v], nc, a):
heappush(q, (nc, v, a))
ans
=
[]
for
i
in
range
(n):
a
=
aaa[i]
if
distances[i,
0
,
1
]
=
=
INF:
ans.append(
-
1
)
continue
if
distances[i,
0
,
1
] !
=
a:
ans.append(distances[i,
0
,
0
])
continue
if
distances[i,
1
,
1
]
=
=
INF:
ans.append(
-
1
)
continue
ans.append(distances[i,
1
,
0
])
return
ans
SIGNATURE
=
'(i8[:],)'
if
sys.argv[
-
1
]
=
=
'ONLINE_JUDGE'
:
from
numba.pycc
import
CC
cc
=
CC(
'my_module'
)
cc.export(
'solve'
, SIGNATURE)(solve)
cc.
compile
()
exit()
if
os.name
=
=
'posix'
:
from
my_module
import
solve
else
:
from
numba
import
njit
solve
=
njit(SIGNATURE, cache
=
True
)(solve)
print
(
'compiled'
,
file
=
sys.stderr)
inp
=
np.fromstring(sys.stdin.read(), dtype
=
np.int64, sep
=
' '
)
ans
=
solve(inp)
print
(
*
ans)