#include<bits/stdc++.h>
using namespace std;
struct node{
int u,v,w;
}q[10005];
int fa[10005],t[10005];
bool cmp(node x,node y)
{
return x.w<y.w;
}
int find(int x)
{
if(fa[x]==x)
return x;
else return fa[x]=find(fa[x]);
}
void join(int x,int y)
{
fa[find(x)]=find(y);
}
int main()
{
int n,p,s=0,ans=1e9;
cin>>n>>p;
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=n;i++)
{
cin>>t[i];
ans=min(ans,t[i]);
}
for(int i=1;i<=p;i++)
{
cin>>q[i].u>>q[i].v>>q[i].w;
q[i].w=q[i].w*2+t[q[i].u]+t[q[i].v];
}
sort(q+1,q+p+1,cmp);
for(int i=1;i<=p;i++)
cout<<q[i].u<<" "<<q[i].v<<" "<<q[i].w<<endl;
for(int i=1;i<=p;i++)
{
if(find(q[i].u)!=find(q[i].v))
{
s++;
join(q[i].u,q[i].v);
ans+=q[i].w;
}
if(s==n-1)
break;
}
cout<<ans;
return 0;
}