7 3
1 4 7
1 2 2
2 3 3
3 4 8
2 5 1
1 6 4
6 7 5
 10 2
1 5
5 3 2
8 4 8
7 6 9
7 10 1
10 1 4
9 5 1
5 8 2
7 2 9
6 5 6
 10 5
4 8 7 5 1
5 1 1
2 7 1
4 3 1
10 9 1
10 1 1
1 8 1
10 7 1
10 3 1
7 6 1
 10 9
9 7 6 10 3 5 2 8 1
9 4 10
10 8 3
3 6 2
5 1 8
5 2 5
1 10 10
6 7 1
9 1 7
1 6 3
 10 5
8 5 2 10 1
3 1 7
5 4 6
10 8 4
6 8 9
7 8 4
9 5 6
8 1 9
2 10 2
9 8 7

3 2
 2 3
 5 1
 0 1
 5 1

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
int MAX1[100005],MAX2[100005],X[100005],XX[100005],X2[100005],head[100005],next[200005],e[200005],chang[200005];
int o,A,B,C,lca,f[100005][20],i,j,ANS,MAX,L[100005],R[100005],Time,b[100005],dp[100005],LG,U[200005],ans[100005],n,m,Q;
bool v[100005];
void add(int a,int b,int c,int d)
{
    e[a]=c;
    next[a]=head[b];
    head[b]=a;
    chang[a]=d;
}
void dfs(int x,int y)
{
    L[x]=++Time;
    dp[x]=y; MAX1[x]=MAX2[x]=-453266144;
    if (b[x]) MAX1[x]=MAX2[x]=0;
    int now=head[x];
    while (now!=0)
    {
        if (!v[e[now]])
        {
            v[e[now]]=true;
            f[e[now]][0]=x;
            dfs(e[now],y+1);
            if (MAX1[e[now]]+chang[now]>MAX1[x])
            {
                MAX2[x]=MAX1[x];
                XX[x]=X[x];
                MAX1[x]=MAX1[e[now]]+chang[now];
                X[x]=X[e[now]];
            } else
              if (MAX1[e[now]]+chang[now]>MAX2[x])
              {
                  MAX2[x]=MAX1[e[now]]+chang[now];
                  XX[x]=X[e[now]];
              }
        }
        now=next[now];
    }
    R[x]=Time;
    if (MAX1[x]==MAX2[x]) X[x]=XX[x]=x;
}
void dfs_2(int x)
{
    if (b[x]) U[x]=max(U[x],0);
    int now=head[x];
    while (now!=0)
    {
        if (!v[e[now]])
        {
            v[e[now]]=true;
            if (L[X[x]]>=L[e[now]] && L[X[x]]<=R[e[now]])
            {
                if (U[x]>MAX2[x])
                {
                    U[e[now]]=U[x];
                    X2[e[now]]=X2[x];
                }
                else {U[e[now]]=MAX2[x]; X2[e[now]]=XX[x];}
                if (U[x]==MAX2[x]) X2[e[now]]=e[now];
            } else
            {
                if (U[x]>MAX1[x])
                {
                    U[e[now]]=U[x];
                    X2[e[now]]=X2[x];
                } else {U[e[now]]=MAX1[x]; X2[e[now]]=X[x];}
                if (U[x]==MAX1[x]) X2[e[now]]=e[now];
            }
            dfs_2(e[now]);
        }
        now=next[now];
    }
}
void dfs_3(int x)
{
    int now=head[x];
    while (now!=0)
    {
        if (!v[e[now]])
        {
            v[e[now]]=true;
            ans[x]+=ans[e[now]];
            dfs_3(e[now]);
        }
        now=next[now];
    }
}
int LCA(int x,int y)
{
    if (dp[x]>dp[y]) swap(x,y);
    if (dp[x]!=dp[y])
    {
        int LG=int(log(dp[y]-dp[x])/log(2)+0.0000000001);
        for (int i=LG; i>=0; i--)
          if (dp[f[y][i]]>=dp[x]) y=f[y][i];
    }
    int LG=int(log(dp[x])/log(2)+0.00000000001);
    for (int i=LG; i>=0; i--)
      if (f[x][i]!=f[y][i]) {x=f[x][i]; y=f[y][i];}
    if (x==y) return x; else return f[x][0];
}
int main()
{
    scanf("%d%d",&n,&m);
    for (i=1; i<=m; i++)
    {
        scanf("%d",&A);
        b[A]=1;
    }
    for (i=1; i<n; i++)
    {
        scanf("%d%d%d",&A,&B,&C);
        add(++o,A,B,C);
        add(++o,B,A,C);
    }
    for (i=1; i<=n; i++) v[i]=false;
    v[1]=true;
    dfs(1,1);
    LG=int(log(n)/log(2)+0.0000000001);
    for (i=1; i<=LG; i++)
        for (j=1; j<=n; j++) f[j][i]=f[f[j][i-1]][i-1];
    for (i=1; i<=n; i++) v[i]=false;
    v[1]=true;
    for (i=1; i<=n; i++) U[i]=-453266144;
    dfs_2(1);
    for (i=1; i<=n; i++)
    if (b[i])
    {
        if (U[i]>MAX1[i])
          Q=X2[i]; else
            if (U[i]==MAX1[i] || MAX1[i]==MAX2[i]) Q=i; else
              Q=X[i];
        ans[Q]++; ans[i]++;
        lca=LCA(i,Q);
        ans[lca]--;
        ans[f[lca][0]]--;
    }
    for (i=1; i<=n; i++) v[i]=false; v[1]=true;
    dfs_3(1);
    for (i=1; i<=n; i++) if (!b[i]) {if (ans[i]>MAX){MAX=ans[i]; ANS=1;} else if (ans[i]==MAX) ANS++;}
    printf("%d %d\n",MAX,ANS);
    return 0;
}
