n, m = list(map(int, input().split())) A = list(map(int, input().split())) inf = 1<<60 D = [inf for _ in range(n*n)] E = [set() for _ in range(n)] E_ = [set() for _ in range(n)] for u in range(n): D[u*n+u] = 0 for _ in range(m): u, v, w = list(map(lambda x: int(x)-1, input().split())) D[u*n+v] = w+1 E[u].add(v) E_[v].add(u) I = [i for i in range(n)] from random import shuffle shuffle(I) X = [1] * n for _ in range(n): cnt0 = 1<<60 m = -1 for s in range(n): if not X[s]: continue cnt = len(E[s])+len(E_[s]) if cnt < cnt0: cnt0 = cnt m = s X[m] = 0 for u in E_[m]: for v in E[m]: if u == v: continue d = D[u*n+m] + D[m*n+v] if D[u*n+v] == inf: D[u*n+v] = d E[u].add(v) E_[v].add(u) else: D[u*n+v] = min(D[u*n+v], d) a0 = inf a1 = 0 for u in range(n): for v in range(n): if u == v: continue d = D[u*n+v]+A[u]+A[v] if a0 > d: a0, a1 = d, 1 elif a0 == d: a1 += 1 print(a0, a1)