#include<bits/stdc++.h>
using namespace std;
int n,m,u,v,w,k,h[200000],f[200000];
struct edge{int u,v,w;}g[3000000];
pair<int,long long>p[200000];
void add(int a,int b,int c){
if(a!=b) g[++k]=(edge){max(h[u],h[v]),min(h[u],h[v]),w};
else g[++k]=(edge){u,v,w},g[++k]=(edge){v,u,w};
}
bool cmp(edge a,edge b){return a.w<b.w;}
int find(int a){return a==f[a]?a:f[a]=find(f[a]);}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) f[i]=i,p[i].first=1;
for(int i=1;i<=n;i++) scanf("%d",&h[i]);
while(m--) scanf("%d%d%d",&u,&v,&w),add(u,v,w);
sort(g+1,g+1+k,cmp);
for(int i=1;i<=k;i++){
int a=find(g[i].u),b=find(g[i].v);
if(a==b) continue;
f[a]=b;
p[b].first+=p[a].first;
p[b].second+=p[a].second+g[i].w;
}
sort(p+1,p+1+n);
return cout<<p[n].first<<' '<<p[n].second,0;
}