#include<bits/stdc++.h>
#define NMAX 200005
#define LOG 19
#define ll long long int
#define MOD 998244353
#define BASE 32
#define INF (ll)1e17
#define VMAX 30000
using namespace std;
ifstream fin("cod.in");
ofstream fout("cod.out");
int n,k,m;
int a[NMAX+1];
vector<pair<int,int>> adj[NMAX+1];
ll dist[1<<5][NMAX+1];
bool cmpHeap(pair<ll,int> a,pair<ll,int> b)
{
return a.first > b.first;
}
void dijkstra(int mask)
{
vector<pair<ll,int>> pq;
for(int i=1;i<=n;i++)
{
if(dist[mask][i] < 1e17)
{
pq.push_back({dist[mask][i], i});
}
}
make_heap(pq.begin(),pq.end(),cmpHeap);
while(!pq.empty())
{
pop_heap(pq.begin(),pq.end(),cmpHeap);
int x = pq.back().second;
ll d = pq.back().first;
pq.pop_back();
if(dist[mask][x]==d)
{
for(auto [y,c] : adj[x])
{
if(dist[mask][y] > dist[mask][x] + c)
{
dist[mask][y] = dist[mask][x] + c;
pq.push_back({dist[mask][y], y});
push_heap(pq.begin(),pq.end(),cmpHeap);
}
}
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cin >> n >> k >> m;
for(int i=0;i<k;i++)
{
cin >> a[i];
}
for(int i=1;i<=m;i++)
{
int x,y,c;
cin >> x >> y >> c;
adj[x].push_back({y,c});
adj[y].push_back({x,c});
}
for(int mask=1;mask<(1<<k);mask++)
{
for(int i=1;i<=n;i++)
{
dist[mask][i] = 1e17;
}
}
for(int i=0;i<k;i++)
{
for(int j=1;j<=n;j++)
{
dist[1<<i][j] = j==a[i] ? 0 : 1e17;
}
dijkstra(1<<i);
}
for(int mask=1;mask < (1<<k);mask++)
{
if(__builtin_popcount(mask) == 1)continue;
vector<int> b;
for(int j=0;j<k;j++)
{
if(mask & (1<<j))
{
}
}
for(int j=0;j<k;j++)
{
if(mask & (1<<j))
{
for(int i=1;i<=n;i++)
{
dist[mask][i] = min(dist[mask][i], dist[mask^(1<<j)][i] + dist[1<<j][i]);
}
}
}
dijkstra(mask);
}
ll mn = 1e17;
for(int i=1;i<=n;i++)
{
mn = min(mn,dist[(1<<k)-1][i]);
}
cout << mn << "\n";
}