#include <bits/stdc++.h>
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll long long
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 1000001
#define INF (1ll<<30)
#define NAME "file"
using namespace std;

ll n, m, q, k, cnt ;
ll a[MAXN] ;
ll lab[MAXN] ;
ll have_important[MAXN ] ;
vector<ll> important ;
vector<ll> adj[MAXN ] ;
bool visited[MAXN ] ;

void dfs(ll u ) {
    if(visited[u]) return ;
    visited[u] = true ;
    cnt ++ ;
for(ll v : adj[u]) if(!visited[v]) dfs(v ) ;
}

ll find_set(ll a ) {
    return lab[a] < 0 ? a : lab[a] = find_set(lab[a]) ;
}

bool union_set(ll a, ll b ) {
    a = find_set(a) ;
    b = find_set(b) ;
    if(a == b ) return false ;
    if(have_important[a] && have_important[b]) return false ;
    if(lab[a] > lab[b]) swap(a, b ) ;
    lab[a] += lab[b] ;
    adj[a].push_back(b) ;
    adj[b].push_back(a ) ;
    have_important[a] += have_important[b] ;
    lab[b] = a ;
    return true ;
}

struct Edge {
    ll u, v, w ;
    bool operator < ( const Edge & other ) const {
        return w < other.w ;
    }
};

vector < Edge > e ;

void init() {
    cin >> n >> m >> k ;

    FOR(i, 1, n ) lab[i] = - 1 ;

    FOR(i, 1, k ) {
        ll x  ;
        cin >> x ;
        important.push_back(x) ;
        have_important[x] = 1 ;
    }
    FOR(i, 1, m ) {
        ll x, y, w ;
        cin >> x >> y >> w ;
        e.push_back({x, y, w }) ;
    }
    sort(e.begin(), e.end() ) ;
}

void solve() {
    ll cnt = 0, ans = 0 ;
    for(auto [u, v, w ] : e ) {
        if(union_set(u, v )) {
            ans += w ;
//            cout << " ok " << el ;
        }
    }

    FOR(i , 1 , n ) {
    if(lab[i] < 0 ) {
        if(!have_important[find_set(i)]) {
            cout << -1 << el ;
            return ;
        }
    }
    }
//    cout << cnt << " cnt " << el ;
//    if(cnt != n ) {
//        cout << -1 << el ;
//        return ;
//    }
    cout << ans << el ;
}

_ROOT_ {
    // freopen(NAME".inp" , "r" , stdin);
    // freopen(NAME".out" , "w", stdout) ;
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1; // cin >> t ;
    while(t--) {
        init();
        solve();
    }
    return (0&0);
}
