#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pi pair<int,int>
const int N = 5e3+5, INF=1e18;
vector<int> vote;
vector<vector<pi>> g(N);
int fnd(int st, vector<int> &p, vector<vector<int>> &dist) {
//11011
int mn = INF;
for (int i=0; i<(1<<5); i++) {
bool ok=true;
int sm=0;
for (int j=0; j<5; j++) {
if (i&(1<<j)) {
if (p[j] == -1) ok = false;
else sm += p[j];
}
}
if (ok) {
mn= min(mn, dist[st][i]+sm);
}
}
if (mn == INF) mn =-1;
return mn;
}
int32_t main() {
cin.tie(0)->sync_with_stdio(0);
int n,m,k;
cin>> n>> m>> k;
for (int i=0; i<k; i++) {
int x;
cin>> x;
vote.push_back(x);
}
for (int i=0; i<m; i++) {
int u,v,w;
cin>> u>> v>> w;
g[v].push_back({u,w});
}
priority_queue<pair<int, pi>, vector<pair<int, pi>>, greater<pair<int, pi>>> pq;
vector<vector<int>> dist(N, vector<int>((1<<5), INF));
for (auto &x : vote) {
dist[x][0] = 0;
pq.push({0, {x, 0}});
}
while (!pq.empty()) {
pair<int, pi> cur = pq.top(); pq.pop();
int c=cur.first, u=cur.second.first, tic=cur.second.second;
if (c > dist[u][tic]) continue;
for (auto &x : g[u]) {
int v=x.first, w=x.second;
if (dist[v][tic] > dist[u][tic] + w) {
dist[v][tic] = dist[u][tic] + w;
pq.push({dist[v][tic], {v, tic}});
}
for (int j=0; j<5; j++) {
if (tic&(1<<j)) continue;
else {
int nuse = tic ^ (1<<j);
int cost = w*(9-j)/10;
if (dist[v][nuse] > dist[u][tic] + cost) {
dist[v][nuse] = dist[u][tic] + cost;
pq.push({dist[v][nuse], {v, nuse}});
}
}
}
}
}
int q;
cin>> q;
while (q--) {
int st;
cin>> st;
vector<int> p(5);
for (int i=0; i<5; i++) cin>> p[i];
cout<< fnd(st, p, dist)<< '\n';
}
}