#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;
ll n, e, k, q, s;
ll t[nx], p[6];
ll mask = 1 << 5;
vector<pii> adj[nx];
priority_queue<tup, vector<tup>, greater<tup>> pq;
vector<vector<ll>> dist(nx, vector<ll> (mask));
void solve()
{
cin >> s;
for(ll i=0;i<5;i++) cin >> p[i];
for(ll bits=0;bits<(mask);bits++)
for(ll i=0;i<n;i++)
dist[i][bits] = INF;
dist[s][0] = 0;
pq.push({0, s, 0}); // 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(p[i] == -1) continue;
if(bits & (1 << i)) continue;
ll nxt_bits = bits | (1 << i);
ll weight = w + p[i] + (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});
}
}
}
ll ans = INF;
for(ll bits=0;bits<(mask);bits++) {
for(ll i=0;i<k;i++) {
ans = min(ans, dist[t[i]][bits]);
}
}
cout << (ans == INF ? -1LL : ans) << '\n';
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin >> n >> e >> k;
for(ll i=0;i<k;i++) cin >> t[i];
for(ll i=0;i<e;i++) {
ll u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
}
cin >> q;
while(q--) {
solve();
}
return 0;
}