#include<bits/stdc++.h>
using namespace std;
int road[505][505];
int vis[505];
int c1,c2;
int n,m;
int teams[505];
long long shortest = 0xffffff;
long long team_num = -1;
long long path_num = 0;
void dfs(int x,long long path,long long num)
{
if(x == c2)
{
if(path<shortest)
{
shortest = path;
team_num = num;
path_num = 1;
}
else if(path == shortest)
{
if(team_num<num)
{
team_num = num;
}
path_num++;
}
else
return;
}
vis[x] = 1;
for(int i = 0;i<n;i++)
{
if(!road[x][i])
continue;
if(vis[i])
continue;
dfs(i,path+road[x][i],num+teams[i]);
}
vis[x] = 0;
}
int main()
{
cin>>n>>m>>c1>>c2;
for(int i = 0;i<n;i++)
{
cin>>teams[i];
}
for(int i = 0;i<m;i++)
{
int x,y,l;
cin>>x>>y>>l;
road[x][y] = road[y][x] = l;
}
dfs(c1,0,teams[c1]);
cout<<path_num<<" "<<team_num<<endl;
return 0;
}