set_city={}
#每个站点可连接的其他站点序号及路径成本(采用字典(存每个站点)里存储字典(存连接至哪个站点的路径需要的时间))
result=[] #可能的路径
min_result=0 #当前存储的可能路径中的移动最小时间,利用这个数值对大于该时间的路径直接忽略,减少大量计算时间
def toint(lis):
for i in range(len(lis)):
lis[i]=int(lis[i])
return lis
def depth(start,end,path=[]): #深度优先搜索
#print('%d'%(start),end='')
#print(path)
path.append(start) #将start点加入路径
global min_result
a = 0
for j in range(len(path) - 1):
a += set_city[path[j]][path[j + 1]]
if a>min_result: #判断是否该路径可以被忽视
return
if start==end: #判断是否已经找到终点
result.append(path)
a = 0
for j in range(len(path) - 1):
a+=set_city[path[j]][path[j+1]]
if a<min_result:
min_result=a
#print('发现可用路径',end='')
#print(path)
return
a=list(set_city[start].keys()) #列出当前点对应的字典的所有key
a=toint(a)
#print('%d:'%start,end='')
#print(len(a))
for i in range(len(a)): #深入
if a[i] not in path:
path_copy = path.copy()
#print('%d 层进入 %d '%(start,a[i][0]))
depth(a[i],end,path_copy)
a=input()
a=a.split(' ')
a=toint(a)
value=input() #站点价值
value=value.split(' ')
value=toint(value)
for i in range(a[0]):
set_city[i]={}
for i in range(a[1]): #构建字典
j=input()
j=j.split(' ')
j=toint(j)
set_city[j[0]][j[1]]=j[2]
set_city[j[1]][j[0]]=j[2]
min_result+=j[2]
#print(value)
depth(a[2],a[3])
#print(result)
fine=[]
#print(set_city)
for i in range(len(result)): #找到可能的路径result中每条路径的花费时间
a=0
for j in range(len(result[i])-1):
a+=set_city[result[i][j]][result[i][j+1]]
fine.append(a)
#print(fine)
ma=min(fine)
num=0
max_value=0
for i in range(len(fine)): #得到相同最小时间花费的路径中的最大站点value和
if fine[i]==ma:
num+=1
max_v=0
for j in range(len(result[i])):
max_v+=value[result[i][j]]
if max_v>max_value:
max_value=max_v
print('%d %d'%(num,max_value))