#include <bits/stdc++.h>
using namespace std;
long long int fact[1000005] = {0};
long long int a[3005], b[3005], c[3005], n, dp[3005][2] = {0};
long long int dfs(vector<long long int>* v, long long int n) {
  long long int i, j, k, max = 0, temp;
  if (v[n].size() == 0) return 1;
  for (i = 0; i < v[n].size(); i++) {
    temp = 1 + dfs(v, v[n][i]);
    if (temp > max) max = temp;
  }
  return max;
}
long long int powe(long long int n, long long int m, long long int mod) {
  long long int num, i, j;
  if (m == 1) return (n % mod);
  if (!(m % 2)) {
    num = powe(n, m / 2, mod) % mod;
    return (num * num) % mod;
  } else {
    num = powe(n, (m - 1) / 2, mod) % mod;
    return ((n % mod) * ((num * num) % mod)) % mod;
  }
}
long long int inv(long long int n, long long int mod) {
  return (powe(n, mod - 2, mod) % mod);
}
long long int ncr(long long int n, long long int r, long long int mod) {
  long long int i, j, k;
  return ((((fact[n] % mod) * (inv(fact[n - r], mod) % mod)) % mod) *
          (inv(fact[r], mod) % mod));
}
long long int calu(long long int pos, long long int lst_flag) {
  long long int res1 = 0, res2 = 0;
  if (pos > n) return 0;
  if (dp[pos][lst_flag] != (-1)) return dp[pos][lst_flag];
  if (lst_flag == 1) {
    res1 = b[pos] + calu(pos + 1, 1);
    res2 = c[pos] + calu(pos + 1, 0);
  } else {
    res1 = a[pos] + calu(pos + 1, 1);
    res2 = b[pos] + calu(pos + 1, 0);
    if (pos == n) res2 = 0;
  }
  dp[pos][lst_flag] = max(res1, res2);
  return max(res1, res2);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int i, j, k;
  cin >> n;
  for (i = 1; i <= n; i++) cin >> a[i];
  for (i = 1; i <= n; i++) cin >> b[i];
  for (i = 1; i <= n; i++) cin >> c[i];
  for (i = 0; i < 3005; i++) dp[i][0] = dp[i][1] = -1;
  c[n] = 0;
  if (n == 1)
    cout << a[1];
  else
    cout << calu(1, 0);
  return 0;
}
