#include <bits/stdc++.h>
using namespace std;
class ParseError {};
class UnionFind {
 public:
  vector<long long> par;
  vector<long long> siz;
  UnionFind(long long sz_) : par(sz_), siz(sz_, 1LL) {
    for (long long i = 0; i < sz_; ++i) par[i] = i;
  }
  void init(long long sz_) {
    par.resize(sz_);
    siz.assign(sz_, 1LL);
    for (long long i = 0; i < sz_; ++i) par[i] = i;
  }
  long long root(long long x) {
    while (par[x] != x) {
      x = par[x] = par[par[x]];
    }
    return x;
  }
  bool merge(long long x, long long y) {
    x = root(x);
    y = root(y);
    if (x == y) return false;
    if (siz[x] < siz[y]) swap(x, y);
    siz[x] += siz[y];
    par[y] = x;
    return true;
  }
  bool issame(long long x, long long y) { return root(x) == root(y); }
  long long size(long long x) { return siz[root(x)]; }
};
long long N, M, K, a, b, c, d, e, H, W, L, T;
long long x, y;
long long A[400005] = {};
long long B[400005] = {};
long long C[400005] = {};
long long D[400005] = {};
long long E[400005] = {};
bool f, ff;
string S[200000];
string SS;
set<long long> sll;
vector<long long> vl[600005];
vector<long long> vll;
vector<pair<long long, long long> > vpl;
vector<string> vs;
set<long long> llset;
multiset<long long> llmset;
queue<long long> ql;
multiset<pair<long long, long long> > plmset;
struct ST {
  long long first;
  long long second;
  long long kaisuu;
};
queue<ST> qpl;
ST bufpl;
long long zettai(long long aa) {
  if (aa < 0) {
    aa *= -1;
  }
  return aa;
}
long long t;
long long RepeatSquaring(long long N, long long P, long long MO) {
  if (P == 0) return 1;
  if (P % 2 == 0) {
    long long t = RepeatSquaring(N, P / 2, MO);
    return t * t % MO;
  }
  return N * RepeatSquaring(N, P - 1, MO);
}
long long gyakugen(long long numb, long long MO) {
  return RepeatSquaring(numb, MO - 2, MO);
}
long long Com(long long NN, long long KK) {
  e = D[NN];
  e *= C[KK];
  e %= 1000000007;
  e *= C[NN - KK];
  e %= 1000000007;
  return e;
}
int main() {
  cin >> N;
  for (int i = 0; i < N; i++) cin >> A[i];
  for (int i = 0; i < N; i++) cin >> B[i];
  for (int i = 0; i < N - 1; i++) cin >> C[i];
  a = 0;
  for (int i = 0; i < N; i++) {
    a += B[A[i]];
    if (i >= 1) {
      if (A[i - 1] + 1 == A[i]) {
        a += C[A[i]];
      }
    }
  }
  cout << a << endl;
  return 0;
}
