
Code
N,M,C1,C2 = map(int,input().split())
N_list = list(map(int,input().split()))
graph = [[-1 for i in range(N)]for j in range(N)]
for i in range(M):
c1,c2,team = map(int,input().split())
graph[c1][c2] = team
graph[c2][c1] = team
min_paths = 0
max_teams = 0
visit = [0 for i in range(N)]
min_distance = float("inf")
def dfs(Start,End,road_leng,teams):
global min_paths,max_teams,visit,min_distance
if road_leng > min_distance:
return
else:
if Start==End:
if road_leng==min_distance:
min_paths += 1
min_distance = road_leng
if max_teams<teams:
max_teams = teams
else:
min_paths = 1
max_teams = teams
min_distance = road_leng
else:
for k in range(N):
if graph[Start][k] != -1 and visit[k]==0:
visit[k] = 1
dfs(k,End,road_leng+graph[Start][k],teams+N_list[k])
visit[k] = 0
visit[C1] = 1
dfs(C1,C2,0,N_list[C1])
print(min_paths, max_teams)
