#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
using namespace std;
int num[505][505],vit[505];
int helper[505];
vector<int> ljb[505];
int n,m,c1,c2;
int minn, countt,dif;
void dfs(int from,int len,int h){
if(len>minn)
return;
if(from==c2){
if(minn>len){
dif=1;
minn=len;
countt=h;
}
else if(minn==len){
dif++;
if(h>countt)
countt=h;
}
return;
}
if(vit[from]==1)
return;
vit[from]=1;
for(int i=0;i<ljb[from].size();++i){
dfs(ljb[from][i],len+num[from][ljb[from][i]],h+helper[ljb[from][i]]);
}
vit[from]=0;
}
int main()
{
//freopen("G://test.txt","r",stdin);
while(scanf("%d%d%d%d",&n,&m,&c1,&c2)!=EOF){
minn=99999999;
countt=0;
dif=0;
for(int i=0;i<n;++i)
scanf("%d",&helper[i]);
for(int i=0;i<n;++i){
vit[i]=0;
ljb[i].clear();
for(int j=0;j<n;++j){
num[i][j]=-1;
}
}
int f,t,l;
for(int i=0;i<m;++i){
scanf("%d%d%d",&f,&t,&l);
num[f][t]=num[t][f]=l;
ljb[f].push_back(t);
ljb[t].push_back(f);
}
dfs(c1,0,helper[c1]);
printf("%d %d\n",dif,countt);
}
return 0;
}