#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n, e, k;
cin >> n >> e >> k;
vector<ll> a(k);
vector<ll> p(5);
for (auto &i : a) {
cin >> i;
}
vector<vector<pair<ll, ll>>> adj(n + 1);
for (int i = 0; i < e; i++) {
ll u, v, c;
cin >> u >> v >> c;
adj[v].push_back({u, c});
}
vector<vector<ll>> dist(n + 1, vector<ll>(1 << 5, 1e18));
priority_queue<pair<ll, pair<ll, ll>>> pq;
for (int i = 0; i < k; i++) {
dist[a[i]][0] = 0;
pq.push({0, {a[i], 0}});
}
while (!pq.empty()) {
auto [nd, buff] = pq.top();
auto [u, dis] = buff;
pq.pop();
nd = -nd;
if (nd > dist[u][dis])
continue;
for (auto [v, c] : adj[u]) {
if (dist[v][dis] > dist[u][dis] + c) {
dist[v][dis] = dist[u][dis] + c;
pq.push({-dist[v][dis], {v, dis}});
}
ll newdis = dis;
for (int i = 0; i < 5; i++) {
if (dis & (1 << i))
continue;
newdis = dis | (1 << i);
ll newc = ((c * (10 - i - 1)) / 10);
if (dist[v][newdis] > dist[u][dis] + newc) {
dist[v][newdis] = dist[u][dis] + newc;
pq.push({-dist[v][newdis], {v, newdis}});
};
}
}
}
ll q;
cin >> q;
for (int i = 0; i < q; i++) {
ll u;
cin >> u;
for (int j = 0; j < 5; j++) {
cin >> p[j];
}
ll ans = 1e18;
for (int i = 0; i < (1 << 5); i++) {
ll add = 0;
ll check = 0;
for (int j = 0; j < 5; j++) {
if (i & (1 << j)) {
if (p[j] != -1) {
add += p[j];
} else {
check = 1;
}
}
}
if (check == 0)
ans = min(ans, dist[u][i] + add);
}
if (ans == 1e18) {
cout << -1 << "\n";
} else {
cout << ans << "\n";
}
}
}