#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 10;
const long long inf = 1e15;
const long long mod = 10487;
void faster() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
}
vector<pair<long long, long long> > adj[MAXN];
vector<int> edge;
long long dist[MAXN];
int n;
void dijkstra(int src, int c) {
  for (int i = 0 + c; i < n + c; i++) {
    dist[i] = inf;
  }
  set<pair<long long, long long> > s;
  dist[src] = 0;
  s.insert({0, src});
  while (!s.empty()) {
    int v = (*s.begin()).second;
    s.erase(s.begin());
    for (int i = 0; i < adj[v].size(); i++) {
      int u = adj[v][i].second;
      int w = adj[v][i].first;
      if (dist[u] > dist[v] + w) {
        dist[u] = dist[v] + w;
        s.insert({dist[u], u});
      }
    }
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int w;
    cin >> w;
    adj[i].push_back({w, i + 1});
    adj[i + 1].push_back({w, i});
  }
  for (int i = 0; i < n - 1; i++) {
    int w;
    cin >> w;
    adj[n + i].push_back({w, n + i + 1});
    adj[n + i + 1].push_back({w, n + i});
  }
  dijkstra(2 * n - 1, n);
  dijkstra(0, 0);
  for (int i = 0; i < n; i++) {
    int w;
    cin >> w;
    edge.push_back(w);
  }
  long long ans[n];
  for (int i = 0; i < n; i++) {
    int x1 = dist[i];
    x1 += edge[i];
    x1 += dist[i + n];
    ans[i] = x1;
  }
  sort(ans, ans + n);
  cout << ans[0] + ans[1] << endl;
}
