#include <bits/stdc++.h>
using namespace std;
int n,m,h[100005],f[100005],num[100005];
struct edge{
int u,v,w;
}e[1000005];
bool cmp(edge a,edge b)
{
if(h[a.v]!=h[b.v])return h[a.v]>h[b.v];
return a.w<b.w;
}
void init()
{
for(int i=1;i<=100000;i++)
{
f[i]=i;
num[i]=1;
}
}
int findf(int x)
{
if(f[x]!=x)f[x]=findf(f[x]);
return f[x];
}
void combine(int x,int y)
{
int fa=findf(x),fb=findf(y);
f[fa]=fb;
num[fb]+=num[fa];
}
int main()
{
cin>>n>>m;
init();
int a,b,c;
for(int i=1;i<=n;i++)
{
cin>>h[i];
}
for(int i=1;i<=m;i++)
{
cin>>a>>b>>c;
e[i]={a,b,c};
}
sort(e+1,e+m+1,cmp);
long long res=0;
for(int i=1;i<=m;i++)
{
a=e[i].u,b=e[i].v,c=e[i].w;
if(findf(a)!=findf(b))
{
res+=c;
combine(a,b);
}
}
int dot=-1;
for(int i=1;i<=n;i++)
{
int anc=findf(i);
dot=max(dot,num[anc]);
}
cout<<dot<<' '<<res;
return 0;
}