#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int GCD(int a, int b) { return b ? GCD(b, a % b) : a; }
stack<long long> sta;
queue<long long> que;
deque<long long> dque;
set<string> s_set;
long long dp[13][100010] = {};
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
int lcm(int x, int y) { return x / gcd(x, y) * y; }
int gcd(const vector<int>& v) {
  int ret = v[0];
  for (int i = 1; i < v.size(); i++) ret = gcd(ret, v[i]);
  return ret;
}
int lcm(const vector<int>& v) {
  int ret = v[0];
  for (int i = 1; i < v.size(); i++) ret = lcm(ret, v[i]);
  return ret;
}
struct Student {
  string name;
  int no, point;
};
bool comp(const Student& a, const Student& b) {
  if (a.name != b.name) return a.name < b.name;
  if (a.point != b.point) return a.point > b.point;
  return a.no < b.no;
}
std::string replaceOtherStr(std::string& replacedStr, std::string from,
                            std::string to) {
  const unsigned int pos = replacedStr.find(from);
  const int len = from.length();
  if (pos == std::string::npos || from.empty()) {
    return replacedStr;
  }
  return replacedStr.replace(pos, len, to);
}
void countPN(int n, std::vector<int>& count) {
  int m = n;
  for (int i = 2; i * i <= n; ++i) {
    while (m % i == 0) {
      m /= i;
      count[i]++;
    }
    if (m == 1) break;
  }
  if (m != 1) count[m]++;
}
const int MAX_N = 2000000;
long long inv[MAX_N + 10];
long long fac[MAX_N + 10], facInv[MAX_N + 10];
class MATH {
 public:
  MATH() {
    inverse();
    factroial();
  }
  long long nCk(long long n, long long k) {
    if (k < 0 || k > n) return 0;
    long long ret = fac[n];
    (ret *= facInv[k]) %= 1000000007;
    (ret *= facInv[n - k]) %= 1000000007;
    return ret;
  }
  long long nHk(long long n, long long k) {
    if (n == 0 && k == 0) return 1;
    long long ret = fac[n + k - 1];
    (ret *= facInv[k]) %= 1000000007;
    (ret *= facInv[n - 1]) %= 1000000007;
    return ret;
  }
  long long nPk(long long n, long long k) {
    if (k < 0 || k > n) return 0;
    long long ret = fac[n];
    (ret *= facInv[n - k]) %= 1000000007;
    return ret;
  }

 private:
  void inverse(void) {
    inv[1] = 1;
    for (int i = 2; i <= MAX_N; ++i) {
      inv[i] = inv[1000000007 % i] * (1000000007 - 1000000007 / i) % 1000000007;
    }
  }
  void factroial(void) {
    fac[0] = facInv[0] = 1;
    for (int i = 1; i <= MAX_N; ++i) {
      fac[i] = (fac[i - 1] * i) % 1000000007;
      facInv[i] = (facInv[i - 1] * inv[i]) % 1000000007;
    }
  }
};
std::vector<int> getCumSum(std::vector<int> baseImos) {
  int baseSize = baseImos.size();
  std::vector<int> cumSum(baseSize, 0);
  cumSum[0] = baseImos[0];
  for (int i = 1; i < baseSize; ++i) {
    cumSum[i] = cumSum[i - 1] + baseImos[i];
  }
  return cumSum;
}
void dfs(int n, string s) {
  if (n == 0)
    cout << s << endl;
  else {
    dfs(n - 1, s + "a");
    dfs(n - 1, s + "b");
    dfs(n - 1, s + "c");
  }
}
vector<int> g[200020];
int s[200020];
bool used[200020];
void dfs(int x) {
  used[x] = 1;
  for (auto y : g[x]) {
    if (used[y]) continue;
    s[y] += s[x];
    dfs(y);
  }
}
long long A, B, C, D, E, F, G, H, I, J, L, N, M, K, O, P, Q, R, S, T, U, V, W,
    X, Y, Z;
long long sum, sum1, sum2, sum3, sum4;
long long flg, flg1, flg2, flg3, cnt, cnt1, cnt2, cnt3, cnt4;
long long wk, wk1, wk2, wk3, wk4;
long long ans;
bool f;
long long weight[110], value[110];
long long a[100010][3];
long long n, h[100005];
vector<long long> p, c;
int vis[200001];
int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  long long max, max1;
  long long min, min1;
  sum = sum1 = sum2 = sum3 = sum4 = 0;
  flg = flg1 = flg2 = flg3 = cnt = cnt1 = cnt2 = cnt3 = cnt4 = 0;
  max = max1 = 0;
  wk = wk1 = wk2 = wk3 = wk4 = 0;
  ans = 0;
  min = min1 = 1000000000;
  std::cin >> N;
  std::vector<long long> v(N + 1);
  std::vector<long long> w(N + 1);
  std::vector<long long> x(N + 1);
  for (long long i = 1; i <= N; i++) {
    std::cin >> v[i];
    max = v[N];
  }
  for (long long i = 1; i <= N; i++) {
    std::cin >> w[i];
  }
  for (long long i = 1; i <= N - 1; i++) {
    std::cin >> x[i];
  }
  for (long long i = 1; i <= N; i++) {
    if (i == 1) {
      sum += w[v[i]];
    } else {
      sum += w[v[i]] + x[v[i - 1]];
    }
  }
  if (1) {
    printf("%lld", sum);
  } else {
  }
  return 0;
  if (1) {
    printf("%lld", N);
  } else {
  }
  return 0;
}
