#include <bits/stdc++.h>
int dr[] = {2, 2, -2, -2, 1, -1, 1, -1};
int dc[] = {1, -1, 1, -1, 2, 2, -2, -2};
int dr1[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dc1[] = {1, -1, 1, 0, -1, 0, 1, -1};
int dr2[] = {0, 0, 1, -1};
int dc2[] = {1, -1, 0, 0};
using namespace std;
long long tr[100005 * 3], laz[100005 * 3], a[100005], k[100005];
void build(long long n, long long b, long long e) {
  if (b == e) {
    tr[n] = a[b];
    return;
  }
  long long mid = (b + e) >> 1, l = n * 2, r = l + 1;
  build(l, b, mid);
  build(r, mid + 1, e);
  tr[n] = tr[l] + tr[r];
}
void make(long long n, long long b, long long e) {
  long long mid = (b + e) >> 1, l = n * 2, r = l + 1;
  long long x = laz[n];
  tr[l] += (mid - b + 1) * x;
  laz[l] += x;
  tr[r] += (e - mid) * x;
  laz[r] += x;
  laz[n] = 0;
}
void update(long long n, long long b, long long e, long long x, long long y,
            long long val) {
  if (b > y || e < x) return;
  if (b >= x && e <= y) {
    tr[n] += (e - b + 1) * val;
    laz[n] += val;
    return;
  }
  long long mid = (b + e) >> 1, l = n * 2, r = l + 1;
  make(n, b, e);
  update(l, b, mid, x, y, val);
  update(r, mid + 1, e, x, y, val);
  tr[n] = tr[l] + tr[r];
}
long long query(long long n, long long b, long long e, long long x,
                long long y) {
  if (b > y || e < x) return 0;
  if (b >= x && e <= y) return tr[n];
  long long mid = (b + e) >> 1, l = n * 2, r = l + 1;
  make(n, b, e);
  long long p = query(l, b, mid, x, y);
  long long p1 = query(r, mid + 1, e, x, y);
  return p + p1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, m, i, j, d, q;
  while (cin >> n) {
    for (i = 1; i <= n; i++) cin >> a[i];
    for (i = 1; i < n; i++) cin >> k[i];
    set<long long> s;
    for (i = 1; i <= n + 1; i++) s.insert(i);
    build(1, 1, n);
    cin >> q;
    while (q--) {
      char ch;
      long long u, v;
      cin >> ch >> u >> v;
      if (ch == 's') {
        long long ans = query(1, 1, n, u, v);
        cout << ans << endl;
        continue;
      }
      s.insert(u);
      auto it = s.lower_bound(u);
      auto it2 = it;
      it2++;
      update(1, 1, n, *it, *it2 - 1, v);
      it = it2;
      while (*it != n + 1) {
        int x = *it;
        long long p = query(1, 1, n, x - 1, x - 1) + k[x - 1];
        long long q = query(1, 1, n, x, x);
        if (p > q) {
          it2 = it;
          it2++;
          update(1, 1, n, *it, *it2 - 1, p - q);
          s.erase(it);
          it = it2;
        } else
          break;
      }
    }
  }
  return 0;
}
