#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
const int MAXLEN = 1000;
const int MAXN = 1000;
char s[MAXLEN + 1];
int slen;
int n;
char v[MAXN][MAXLEN + 1];
int vlen[MAXN];
int c[10];
int p[MAXLEN + 2][MAXN];
int dp[MAXLEN + 2][MAXN + 1];
bool havecarry[MAXN];
inline int getdig(int idx, int pos) {
  int ret = pos >= vlen[idx] ? 0 : v[idx][pos] - '0';
  return ret;
}
void run() {
  scanf("%s", s);
  slen = strlen(s);
  reverse(s, s + slen);
  scanf("%d", &n);
  for (int i = (0); i < (n); ++i) {
    scanf("%s", v[i]);
    vlen[i] = strlen(v[i]);
    reverse(v[i], v[i] + vlen[i]);
  }
  for (int i = (0); i < (10); ++i) scanf("%d", &c[i]);
  for (int i = (0); i < (n); ++i) p[0][i] = i;
  for (int i = (0); i <= (MAXLEN); ++i) {
    static pair<int, int> lst[MAXN];
    for (int j = (0); j < (n); ++j)
      lst[j] = make_pair(n * (9 - getdig(p[i][j], i)) + j, p[i][j]);
    sort(lst, lst + n);
    for (int j = (0); j < (n); ++j) p[i + 1][j] = lst[j].second;
  }
  for (int i = (0); i <= (MAXLEN + 1); ++i)
    for (int j = (0); j <= (MAXN); ++j) dp[i][j] = -1;
  dp[0][0] = 0;
  for (int i = (0); i <= (MAXLEN); ++i) {
    for (int k = (0); k < (10); ++k) {
      if (i >= slen && k != 0) continue;
      if (i < slen && s[i] != '?' && s[i] != '0' + k) continue;
      if (i == slen - 1 && k == 0) continue;
      int nj = 0;
      for (int j = (0); j <= (n); ++j) havecarry[j] = false;
      int sum = 0;
      for (int j = (0); j < (n); ++j)
        if (i < slen || i < vlen[j]) sum += c[(getdig(j, i) + k) % 10];
      for (int j = (0); j <= (n); ++j) {
        if (dp[i][j] != -1) {
          while (nj < n &&
                 getdig(p[i + 1][nj], i) + k + havecarry[p[i + 1][nj]] >= 10)
            ++nj;
          if (dp[i][j] + sum > dp[i + 1][nj]) dp[i + 1][nj] = dp[i][j] + sum;
        }
        if (j < n) {
          havecarry[p[i][j]] = true;
          sum += c[(getdig(p[i][j], i) + k + 1) % 10];
          if (i < slen || i < vlen[p[i][j]])
            sum -= c[(getdig(p[i][j], i) + k) % 10];
        }
      }
    }
  }
  int ret = dp[MAXLEN + 1][0];
  printf("%d\n", ret);
}
int main() {
  run();
  return 0;
}
