#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<algorithm>
using std::queue;
typedef long long LL;
const int N=100000+10;
const int M=1000000+10;
int n,m,h[N];
struct EG{int x,y,z;}edge[M*2];
int L;
int vis[N];
struct Link{int y,z;Link *next;}*head[N];
int f[N];
void add_edge(int x,int y,int z)
{
edge[L++]=(EG){x,y,z};
Link *p=new Link;
p->y=y; p->z=z;
p->next=head[x];
head[x]=p;
}
int bfs()
{
queue<int> Q;
int number=0;
Q.push(1); vis[1]=1;
while(!Q.empty())
{
int x=Q.front();Q.pop();
if((++number)==n) return number;
for(Link *p=head[x];p;p=p->next)
if(!vis[p->y])
{
vis[p->y]=1;
Q.push(p->y);
}
}
return number;
}
bool cmp(EG a,EG b)
{
if(h[a.y]==h[b.y]) return a.z<b.z;
return h[a.y]>h[b.y];
}
int getroot(int x) { return f[x]==x ? x : f[x]=getroot(f[x]); }
inline void merge(int x,int y) { f[getroot(x)]=getroot(y); }
LL solve()
{
for(int i=1;i<=n;i++) f[i]=i;
std::sort(edge,edge+L,cmp);
LL tot=0;
for(int i=0;i<L;i++)
{
int x=edge[i].x;
int y=edge[i].y;
if(!vis[x] || !vis[y]) continue;
if(getroot(x)==getroot(y)) continue;
merge(x,y);
tot+=edge[i].z;
}
return tot;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&h[i]);
while(m--)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(h[a]>=h[b]) add_edge(a,b,c);
if(h[b]>=h[a]) add_edge(b,a,c);
}
printf("%d ",bfs());
printf("%lld\n",solve());
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxxdWV1ZT4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTxhbGdvcml0aG0+CnVzaW5nIHN0ZDo6cXVldWU7CnR5cGVkZWYgbG9uZyBsb25nIExMOwpjb25zdCBpbnQgTj0xMDAwMDArMTA7CmNvbnN0IGludCBNPTEwMDAwMDArMTA7CmludCBuLG0saFtOXTsKc3RydWN0IEVHe2ludCB4LHksejt9ZWRnZVtNKjJdOwppbnQgTDsKaW50IHZpc1tOXTsKc3RydWN0IExpbmt7aW50IHksejtMaW5rICpuZXh0O30qaGVhZFtOXTsKaW50IGZbTl07CiAKdm9pZCBhZGRfZWRnZShpbnQgeCxpbnQgeSxpbnQgeikKewogICAgZWRnZVtMKytdPShFRyl7eCx5LHp9OwogICAgTGluayAqcD1uZXcgTGluazsKICAgIHAtPnk9eTsgcC0+ej16OwogICAgcC0+bmV4dD1oZWFkW3hdOwogICAgaGVhZFt4XT1wOwp9CiAKaW50IGJmcygpCnsKICAgIHF1ZXVlPGludD4gUTsKICAgIGludCBudW1iZXI9MDsKICAgIFEucHVzaCgxKTsgdmlzWzFdPTE7CiAgICB3aGlsZSghUS5lbXB0eSgpKQogICAgewogICAgICAgIGludCB4PVEuZnJvbnQoKTtRLnBvcCgpOwogICAgICAgIGlmKCgrK251bWJlcik9PW4pIHJldHVybiBudW1iZXI7CiAgICAgICAgZm9yKExpbmsgKnA9aGVhZFt4XTtwO3A9cC0+bmV4dCkKICAgICAgICAgICAgaWYoIXZpc1twLT55XSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmlzW3AtPnldPTE7CiAgICAgICAgICAgICAgICBRLnB1c2gocC0+eSk7CiAgICAgICAgICAgIH0KICAgIH0KICAgIHJldHVybiBudW1iZXI7Cn0KIApib29sIGNtcChFRyBhLEVHIGIpCnsKICAgIGlmKGhbYS55XT09aFtiLnldKSByZXR1cm4gYS56PGIuejsKICAgIHJldHVybiBoW2EueV0+aFtiLnldOwp9CiAKaW50IGdldHJvb3QoaW50IHgpIHsgcmV0dXJuIGZbeF09PXggPyB4IDogZlt4XT1nZXRyb290KGZbeF0pOyB9CmlubGluZSB2b2lkIG1lcmdlKGludCB4LGludCB5KSB7IGZbZ2V0cm9vdCh4KV09Z2V0cm9vdCh5KTsgfQogCkxMIHNvbHZlKCkKewogICAgZm9yKGludCBpPTE7aTw9bjtpKyspIGZbaV09aTsKICAgIHN0ZDo6c29ydChlZGdlLGVkZ2UrTCxjbXApOwogICAgTEwgdG90PTA7CiAgICBmb3IoaW50IGk9MDtpPEw7aSsrKQogICAgewogICAgICAgIGludCB4PWVkZ2VbaV0ueDsKICAgICAgICBpbnQgeT1lZGdlW2ldLnk7CiAgICAgICAgaWYoIXZpc1t4XSB8fCAhdmlzW3ldKSBjb250aW51ZTsKICAgICAgICBpZihnZXRyb290KHgpPT1nZXRyb290KHkpKSBjb250aW51ZTsKICAgICAgICBtZXJnZSh4LHkpOwogICAgICAgIHRvdCs9ZWRnZVtpXS56OwogICAgfQogICAgcmV0dXJuIHRvdDsKfQogCmludCBtYWluKCkKewogICAgc2NhbmYoIiVkJWQiLCZuLCZtKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBzY2FuZigiJWQiLCZoW2ldKTsKICAgIHdoaWxlKG0tLSkKICAgIHsKICAgICAgICBpbnQgYSxiLGM7CiAgICAgICAgc2NhbmYoIiVkJWQlZCIsJmEsJmIsJmMpOwogICAgICAgIGlmKGhbYV0+PWhbYl0pIGFkZF9lZGdlKGEsYixjKTsKICAgICAgICBpZihoW2JdPj1oW2FdKSBhZGRfZWRnZShiLGEsYyk7CiAgICB9CiAgICBwcmludGYoIiVkICIsYmZzKCkpOwogICAgcHJpbnRmKCIlbGxkXG4iLHNvbHZlKCkpOwogICAgcmV0dXJuIDA7Cn0=