#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
const int M = 1002;
long long f[maxn][maxn];
char a[maxn];
char b[maxn][maxn];
int val[maxn];
int cost[maxn];
int len[maxn];
int ml[maxn];
pair<int, int> lab[maxn];
int n, m, l;
int main() {
  scanf("%s", a);
  m = strlen(a);
  reverse(a, a + m);
  for (int i = m; i <= M + 1; i++) a[i] = '0';
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%s", b[i]);
    l = strlen(b[i]);
    reverse(b[i], b[i] + l);
    for (int j = l; j <= M; j++) b[i][j] = '0';
    len[i] = l;
  }
  for (int i = 0; i < 10; i++) scanf("%d", &cost[i]);
  memset(f, 0xef, sizeof(f));
  f[0][0] = 0;
  for (int i = 0; i < n; i++) lab[i] = pair<int, int>(0, i);
  for (int i = 0; i <= M; i++) {
    int l = 0, r = 9;
    if (i == m - 1) l = 1;
    if (a[i] ^ '?') l = a[i] - '0', r = a[i] - '0';
    for (int j = 0; j < n; j++)
      val[j] = b[lab[j].second][i] - '0', ml[j] = max(m, len[lab[j].second]);
    for (int k = l; k <= r; k++) {
      int c2 = 0, d2 = 0;
      for (int j = 0; j < n; j++)
        c2 += (val[j] + k >= 10),
            d2 += (val[j] + k == 0 && i >= ml[j]) ? 0 : cost[(val[j] + k) % 10];
      for (int j = 0; j <= n; j++) {
        f[i + 1][c2] = max(f[i + 1][c2], f[i][j] + d2);
        if (j < n) {
          c2 -= (val[j] + k >= 10), d2 -= (val[j] + k == 0 && i >= ml[j])
                                              ? 0
                                              : cost[(val[j] + k) % 10];
          c2 += (val[j] + k + 1 >= 10), d2 += cost[(val[j] + k + 1) % 10];
        }
      }
    }
    for (int j = 0; j < n; j++)
      lab[j] = pair<int, int>(val[j] * (n + 1) + n - j, lab[j].second);
    sort(lab, lab + n);
    reverse(lab, lab + n);
  }
  printf("%I64d\n", f[M + 1][0]);
}
