#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
#include<algorithm>
#include<ctype.h>
using namespace std;
#define inf 1<<29
int n,m,s,d,c[505],minlen;
int G[505][505],dis[505],cnt,buf[505],ss,path[505],ans;
bool vis[505];
void dijkstra()
{
memset(vis,0,sizeof(vis));
vis[s]=1;
for(int i=0;i<n;i++)
dis[i]=G[s][i];
for(int k=1;k<n;k++)
{
int minn=inf,tmp;
for(int i=0;i<n;i++)
if(!vis[i]&&dis[i]<minn)
minn=dis[tmp=i];
vis[tmp]=1;
for(int i=0;i<n;i++)
if(dis[i]>dis[tmp]+G[tmp][i])
dis[i]=dis[tmp]+G[tmp][i];
}
minlen=dis[d];
}
void dfs(int u,int len,int sum,int step)
{
buf[step]=u;
if(len>minlen) return ;
if(u==d&&len==minlen)
{
cnt++;
if(sum>ans)
{
ans=sum;
ss=step;
memcpy(path,buf,sizeof(buf));
}
return ;
}
for(int i=0;i<n;i++)
{
if(!vis[i])
{
vis[i]=1;
dfs(i,len+G[u][i],sum+c[i],step+1);
vis[i]=0;
}
}
}
int main()
{
scanf("%d %d %d %d",&n,&m,&s,&d);
for(int i=0;i<n;i++)
scanf("%d",&c[i]);
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
if(i==j) G[i][j]=G[j][i]=0;
else G[i][j]=G[j][i]=inf;
for(int i=0;i<m;i++)
{
int u,v,l;
scanf("%d %d %d",&u,&v,&l);
if(l<G[u][v]) G[u][v]=G[v][u]=l;
}
dijkstra();
memset(vis,0,sizeof(vis));
cnt=0;
ans=0;
vis[s]=1;
dfs(s,0,c[s],0);
printf("%d %d\n",cnt,ans);
for(int i=0;i<=ss;i++)
{
if(i) printf(" ");
printf("%d",path[i]);
}
printf("\n");
return 0;
}