#include<bits/stdc++.h>
#define int long long
#define guo continue
#define tiao break
#define g return 0
using namespace std;
typedef int lsqxx;
struct lq{
lsqxx to,w,nxt;
}e[2000005];
lsqxx h[1000005],cnt;
void add(lsqxx u,lsqxx v,lsqxx w)
{
e[++cnt].to=v;e[cnt].w=w;e[cnt].nxt=h[u];h[u]=cnt;
}
int n,m,hi[1000005],x,y,z;
int dis[1000005],vis[1000005];
void dfs(int t)
{
dis[t]=1;
vis[t]=1;
for(int i=h[t];i;i=e[i].nxt)
{
if(vis[e[i].to]) continue;
dfs(e[i].to);
}
}
struct l{
int u,v,w;
}t[1000005];
int cntt;
bool cmp(l x,l y)
{
if(hi[x.v]!=hi[y.v]) return hi[x.v]>hi[y.v];
return x.w<y.w;
}
int f[1000005];
int getfa(int x)
{
if(f[x]==x) return f[x];
return f[x]=getfa(f[x]);
}
int cntan,ans;
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
scanf("%lld",&hi[i]);
for(int i=1;i<=m;i++)
{
scanf("%lld%lld%lld",&x,&y,&z);
if(hi[x]==hi[y])
add(x,y,z),add(y,x,z);
if(hi[x]>hi[y])
add(x,y,z);
if(hi[x]<hi[y])
add(y,x,z);
}
dfs(1);
for(int i=1;i<=n;i++)
if(dis[i])
{
cntan++;
for(int j=h[i];j;j=e[j].nxt)
if(dis[e[j].to])
t[++cntt].u=i,t[cntt].v=e[i].to,t[cntt].w=e[i].w;
}
sort(1+t,1+cntt+t,cmp);
for(int i=1;i<=n;i++)
f[i]=i;
int hhh=0;
for(int i=1;i<=cntt;i++)
{
int fu=getfa(t[i].u),fv=getfa(t[i].v);
if(fu==fv) continue;
f[fu]=fv;
ans+=t[i].w;
hhh++;
if(hhh>=cntan-1)
break;
}
printf("%lld %lld",cntan,ans);
g;
}