#include using namespace std; const int LOG = 24; const long long INF = 1000000000000000000; int main(){ vector C(26); for (int i = 0; i < 26; i++){ cin >> C[i]; C[i]--; } vector K(26); for (int i = 0; i < 26; i++){ cin >> K[i]; } int N; cin >> N; vector S(N); vector A(N), B(N), E(N); for (int i = 0; i < N; i++){ cin >> S[i] >> A[i] >> B[i] >> E[i]; A[i]--; B[i]--; } vector s(N, 0); for (int i = 0; i < N; i++){ int L = S[i].size(); for (int j = 0; j < L; j++){ s[i] |= 1 << (S[i][j] - 'A'); } } vector sum(16, 0); vector ok(16, true); for (int i = 0; i < 26; i++){ vector> P(16, vector(16, -INF)); for (int j = 0; j < N; j++){ if ((s[j] >> i & 1) == 1){ P[A[j]][B[j]] = max(P[A[j]][B[j]], (long long) E[j]); P[B[j]][A[j]] = max(P[B[j]][A[j]], (long long) E[j]); } } for (int j = 0; j < 16; j++){ P[j][j] = 0; } vector>> dp(LOG, vector>(16, vector(16, -INF))); dp[0] = P; for (int j = 0; j < LOG - 1; j++){ for (int k = 0; k < 16; k++){ for (int m = 0; m < 16; m++){ for (int n = 0; n < 16; n++){ dp[j + 1][k][n] = max(dp[j + 1][k][n], dp[j][k][m] + dp[j][m][n]); } } } } vector> c(16, vector(16, -INF)); for (int j = 0; j < 16; j++){ c[j][j] = 0; } for (int j = 0; j < LOG; j++){ if ((K[i] >> j & 1) == 1){ vector> c2(16, vector(16, -INF)); for (int k = 0; k < 16; k++){ for (int m = 0; m < 16; m++){ for (int n = 0; n < 16; n++){ c2[k][n] = max(c2[k][n], c[k][m] + dp[j][m][n]); } } } swap(c, c2); } } for (int j = 0; j < 16; j++){ if (c[C[i]][j] < -INF / 2){ ok[j] = false; } else { sum[j] += c[C[i]][j]; } } } long long mx = -INF; for (int i = 0; i < 16; i++){ if (ok[i]){ mx = max(mx, sum[i]); } } if (mx == -INF){ cout << "Impossible" << endl; } else { cout << mx << endl; } }