#include <bits/stdc++.h>
using namespace std;
int IN() {
  int x = 0, f = 0, ch;
  for (; (ch = getchar()) < '0' || ch > '9';) f = (ch == '-');
  for (; ch >= '0' && ch <= '9'; (ch = getchar())) x = x * 10 + ch - '0';
  return f ? -x : x;
}
int N, L, cost[15];
int A[1005], Len[1005], B[1005][1005];
int rk[1005], ID[1005], now[1005];
int F[1005][1005], val[1005][15], G[1005][15];
void Read(int* A, int& len) {
  static char s[1005];
  scanf("%s", s + 1);
  len = strlen(s + 1);
  for (int i = 1, lim = len; i <= lim; i++) {
    int t = s[len - i + 1];
    if (t == '?')
      A[i] = -1;
    else
      A[i] = t - '0';
  }
}
bool Cmp(int a, int b) {
  if (now[a] != now[b]) return now[a] > now[b];
  return rk[a] < rk[b];
}
bool Right(int k, int j, int t) {
  t = ID[t];
  if (k + now[t] >= 10) return 1;
  if (k + now[t] == 9 && rk[t] <= j) return 1;
  return 0;
}
int main(int argc, char* argv[]) {
  Read(A, L);
  N = IN();
  for (int i = 1, lim = N; i <= lim; i++) Read(B[i], Len[i]);
  for (int i = 0, lim = 9; i <= lim; i++) cost[i] = IN();
  for (int i = 1, lim = N; i <= lim; i++) ID[i] = rk[i] = i;
  for (int i = 0, lim = 1001; i <= lim; i++)
    for (int j = 0, lim = N; j <= lim; j++) F[i][j] = -(1 << 30);
  F[0][0] = 0;
  for (int i = 1, lim = 1001; i <= lim; i++) {
    for (int j = 1, lim = N; j <= lim; j++)
      for (int k = 0, lim = 9; k <= lim; k++) {
        val[j][k] = val[j - 1][k];
        int t = ID[j];
        if (i <= max(Len[t], L))
          val[j][k] += cost[(B[t][i] + k) % 10];
        else if ((B[t][i] + k) % 10)
          val[j][k] += cost[(B[t][i] + k) % 10];
      }
    for (int j = 0, lim = N; j <= lim; j++)
      for (int k = 0, lim = 9; k <= lim; k++)
        G[j][k] = F[i - 1][j] + val[j][(k + 1) % 10] + val[N][k] - val[j][k];
    for (int j = 1, lim = N; j <= lim; j++) now[j] = B[j][i];
    sort(ID + 1, ID + N + 1, Cmp);
    int t = 0;
    for (int k = 0, lim = 9; k <= lim; k++)
      for (int j = 0, lim = N; j <= lim; j++) {
        for (; t + 1 <= N && Right(k, j, t + 1); t++)
          ;
        if (i == L && k == 0) continue;
        if (A[i] == -1 || A[i] == k)
          if (G[j][k] > F[i][t]) F[i][t] = G[j][k];
      }
    for (int j = 1, lim = N; j <= lim; j++) rk[ID[j]] = j;
  }
  int Ans = -(1 << 30);
  for (int i = 0, lim = N; i <= lim; i++)
    if (F[1001][i] > Ans) Ans = F[1001][i];
  printf("%d\n", Ans);
  return 0;
}
