# pragma GCC target("avx2") # pragma GCC optimize("O3") # pragma GCC optimize("unroll-loops") #include #include using namespace std; using namespace atcoder; using ll = long long; constexpr ll INF = 1e12; #define rep(i, n) for(int i = 0; i < (n); i++) int main() { int N, M; cin >> N >> M; ll P[N]; for (auto &p: P) cin >> p; ll d[N][N]; rep(i, N) rep(j, N) d[i][j] = INF; rep(_, M) { int u, v; ll t; cin >> u >> v >> t; d[u - 1][v - 1] = t; } rep(i, N) d[i][i] = 0; rep(k, N) rep(i, N) rep(j, N) { d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } ll min_dist = INF; rep(i, N) rep(j, N) { if (i == j) continue; min_dist = min(min_dist, d[i][j] + P[i] + P[j]); } ll count = 0; rep(i, N) rep(j, N) { if (i == j) continue; if (d[i][j] + P[i] + P[j] == min_dist) count++; } cout << min_dist << ' ' << count << '\n'; }