1 #include <cstdio>
2 #include <algorithm>
3 using namespace std;
4
5 int n, m, c1, c2;
6 int dis[510], weight[510], e[510][510], num[510], w[510];
7 bool visit[510];
8 const int inf = 99999999;
9
10 int main() {
11
12 scanf("%d%d%d%d", &n, &m, &c1, &c2);
13 for (int i = 0; i < n; i++)
14 scanf("%d", &weight[i]);
15 fill(e[0], e[0] + 510 * 510, inf);
16 fill(dis, dis + 510, inf);
17 int a, b, c;
18 for (int i = 0; i < m; i++) {
19 scanf("%d%d%d", &a, &b, &c);
20 e[a][b] = c;
21 e[b][a] = c;
22 }
23
24 //dij
25 dis[c1] = 0;
26 w[c1] = weight[c1];
27 num[c1] = 1;
28 for (int i = 0; i < n; i++) {
29 int u = -1, minn = inf;
30 for (int j = 0; j < n; j++) {
31 if (visit[j] == false && dis[j] < minn) {
32 u = j;
33 minn = dis[j];
34 }
35 }
36 if (u == -1) break;
37 visit[u] = true;
38 for (int v = 0; v < n; v++) {
39 if (visit[v] == false && e[u][v] != inf) {
40 if (dis[u] + e[u][v] < dis[v]) {
41 dis[v] = dis[u] + e[u][v];
42 num[v] = num[u];
43 w[v] = w[u] + weight[v];
44 }
45 else if (dis[u] + e[u][v] == dis[v]) {
46 num[v] = num[v] + num[u];
47 if (w[u] + weight[v] > w[v])
48 w[v] = w[u] + weight[v];
49 }
50 }
51 }
52 }
53
54 printf("%d %d", num[c2], w[c2]);
55 return 0;
56 }