#include <bits/stdc++.h>
const int inf = 1 << 30;
char A[1010], B[1010][1010];
int n, lA, lB[1010], m, c[10], f[1010][1010], las[1010], cur[1010], d[1010],
    tmp[10][1010], cnt[10], to[10], sum[10];
void cmax(int& a, int b) { b > a ? a = b : 1; }
int main() {
  scanf("%s%d", A, &n);
  lA = strlen(A);
  cmax(m, lA);
  for (int i = 0; i < n; i++) {
    scanf("%s", B[i]);
    cmax(m, lB[i] = strlen(B[i]));
  }
  for (int i = 0; i < 10; i++) scanf("%d", c + i);
  for (int i = 0; i < n; i++) las[i] = i;
  for (int i = m; i >= 0; i--) {
    for (int j = 0; j < 10; j++) cnt[j] = sum[j] = 0;
    for (int j = 0; j < n; j++) {
      int l = las[j];
      d[l] = lB[l] - m + i > 0 ? B[l][lB[l] - m + i - 1] - '0' : 0;
      tmp[d[l]][cnt[d[l]]++] = l;
      for (int k = lB[l] - m + i > 0 || lA - m + i > 0 ? 0 : 1; k < 10; k++)
        sum[k] += c[(d[l] + k) % 10];
    }
    for (int j = 0; j < 10; j++) to[j] = j ? to[j - 1] + cnt[10 - j] : 0;
    for (int j = 0; j <= m; j++) f[i][j] = -inf;
    for (int j = 0; j <= (i == m ? 0 : n); j++) {
      if (lA - m + i > 0 && A[lA - m + i - 1] == '?') {
        for (int k = lA - m + i == 1 ? 1 : 0; k < 10; k++)
          cmax(f[i][to[k]], f[i + 1][j] + sum[k]);
      } else {
        int k = lA - m + i > 0 ? A[lA - m + i - 1] - '0' : 0;
        cmax(f[i][to[k]], f[i + 1][j] + sum[k]);
      }
      if (j < n) {
        int l = las[n - j - 1];
        to[9 - d[l]]++;
        for (int k = 0; k < 10; k++) {
          if (k || lB[l] - m + i > 0 || lA - m + i > 0)
            sum[k] -= c[(d[l] + k) % 10];
          sum[k] += c[(d[l] + k + 1) % 10];
        }
      }
    }
    for (int j = 0, k = 0; j < 10; j++)
      for (int l = 0; l < cnt[j]; l++) las[k++] = tmp[j][l];
  }
  printf("%d\n", f[0][0]);
}
