#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;
using tup = tuple<ll, ll, ll>;
const ll nx = 5e3+5;
const ll INF = 1e18;
const ll mask = 1 << 5;
ll n, e, k, q, s;
ll t[nx], p[6];
vector<pii> adj[nx];
priority_queue<tup, vector<tup>, greater<tup>> pq;
ll dist[nx][mask];
void solve()
{
cin >> s;
for(ll i=0;i<5;i++) cin >> p[i];
ll ans = INF;
for(ll bits=0;bits<mask;bits++) {
bool skip = false;
for(ll i=0;i<5;i++) {
if((bits & (1 << i)) && p[i] == -1)
skip = true;
}
if(skip) continue;
ll sum = 0;
for(ll i=0;i<5;i++) {
if(bits & (1 << i))
sum += p[i];
}
ans = min(ans, dist[s][bits] + sum);
}
cout << (ans == INF ? -1LL : ans) << '\n';
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin >> n >> e >> k;
for(ll bits=0;bits<(mask);bits++)
for(ll i=0;i<n;i++)
dist[i][bits] = INF;
for(ll i=0;i<k;i++) {
cin >> t[i];
dist[t[i]][0] = 0;
pq.push({0, t[i], 0});
}
for(ll i=0;i<e;i++) {
ll u, v, w;
cin >> u >> v >> w;
adj[v].push_back({u, w});
}
// [weight, node, bits]
while(!pq.empty())
{
auto [w, u, bits] = pq.top();
pq.pop();
if(w > dist[u][bits]) continue;
for(auto& [v, nw] : adj[u]) {
for(ll i=0;i<5;i++) {
if(bits & (1 << i)) continue;
ll nxt_bits = bits | (1 << i);
ll weight = w + (nw - (nw * (i + 1) / 10));
if(dist[v][nxt_bits] > weight) {
dist[v][nxt_bits] = weight;
pq.push({weight, v, nxt_bits});
}
}
if(dist[v][bits] > w + nw) {
dist[v][bits] = w + nw;
pq.push({w + nw, v, bits});
}
}
}
cin >> q;
while(q--) {
solve();
}
return 0;
}