#include<bits/stdc++.h>
using namespace std;
const int MAXN=502;
const int INF=1000000000;
int weight[MAXN]={};
int w[MAXN]={};
int dis[MAXN]={};
int G[MAXN][MAXN]={};
int num[MAXN]={};
bool vis[MAXN]={false};
int n,m,c1,c2;
void dij(int v){
fill(dis,dis+MAXN,INF);
dis[v]=0;
fill(num,num+MAXN,0);
num[v]=1;w[v]=weight[v];
for(int i=0;i<n;i++){
int MINLEN=INF;int k=-1;
for(int j=0;j<n;j++){
if(vis[j]==false&&dis[j]<MINLEN){
k=j;MINLEN=dis[j];
}
}
if(k==-1) return;
vis[k]=true;
for(int j=0;j<n;j++){
if(vis[j]==false&&G[k][j]!=INF){
if(dis[k]+G[k][j]<dis[j]){
dis[j]=dis[k]+G[k][j];
num[j]=num[k];
w[j]=w[k]+weight[j];
}else if(dis[k]+G[k][j]==dis[j]){
num[j]+=num[k];
if(w[j]<w[k]+weight[j]){
w[j]=w[k]+weight[j];
}
}
}
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
cin>>n>>m>>c1>>c2;
for(int i=0;i<n;i++){
cin>>weight[i];
}
fill(G[0],G[0]+MAXN*MAXN,INF);
for(int i=0;i<m;i++){
int start,end,len;
cin>>start>>end>>len;
G[start][end]=len;
G[end][start]=len;
}
dij(c1);
cout<<num[c2]<<' '<<w[c2];
return 0;
}