#include <bits/stdc++.h>
using namespace std;
const long long MAXN = (1 << 17);
pair<bool, long long> d[2 * MAXN];
long long sum[2 * MAXN];
long long ma[2 * MAXN];
long long k[MAXN];
long long pref_k[MAXN];
long long n;
long long inf = 1ll * 1000 * 1000 * 1000 * 1000 * 1000 * 1000;
void push(long long i, long long len) {
  if (!d[i].first) return;
  d[i * 2].first = true;
  d[i * 2].second = d[i].second;
  ma[i * 2] = d[i].second;
  sum[i * 2] = d[i].second * len;
  d[i * 2 + 1].first = true;
  d[i * 2 + 1].second = d[i].second;
  ma[i * 2 + 1] = d[i].second;
  sum[i * 2 + 1] = d[i].second * len;
  d[i].first = false;
}
long long find_elem(long long i, long long l, long long r, long long x) {
  if (l == r - 1) return sum[i];
  push(i, (r - l) / 2);
  long long m = (r + l) / 2;
  if (x < m) return find_elem(i * 2, l, m, x);
  return find_elem(i * 2 + 1, m, r, x);
}
long long find_first_greater(long long i, long long l, long long r,
                             long long left, long long right, long long x) {
  if (ma[i] < x) return -1;
  if (l == r - 1) return l;
  push(i, (r - l) / 2);
  long long m = (l + r) / 2;
  if (right <= m) return find_first_greater(i * 2, l, m, left, right, x);
  if (left >= m) return find_first_greater(i * 2 + 1, m, r, left, right, x);
  long long cur = find_first_greater(i * 2, l, m, left, m, x);
  if (cur != -1) return cur;
  return find_first_greater(i * 2 + 1, m, r, m, right, x);
}
void update(long long i, long long l, long long r, long long left,
            long long right, long long x) {
  if (l == left && r == right) {
    d[i].first = true;
    d[i].second = x;
    ma[i] = x;
    sum[i] = x * (r - l);
    return;
  }
  push(i, (r - l) / 2);
  long long m = (l + r) / 2;
  if (right <= m)
    update(i * 2, l, m, left, right, x);
  else if (left >= m)
    update(i * 2 + 1, m, r, left, right, x);
  else {
    update(i * 2, l, m, left, m, x);
    update(i * 2 + 1, m, r, m, right, x);
  }
  ma[i] = max(ma[i * 2], ma[i * 2 + 1]);
  sum[i] = sum[i * 2] + sum[i * 2 + 1];
}
long long get_sum(long long i, long long l, long long r, long long left,
                  long long right) {
  if (l == left && r == right) return sum[i];
  push(i, (r - l) / 2);
  long long m = (l + r) / 2;
  if (right <= m) return get_sum(i * 2, l, m, left, right);
  if (left >= m) return get_sum(i * 2 + 1, m, r, left, right);
  return get_sum(i * 2, l, m, left, m) + get_sum(i * 2 + 1, m, r, m, right);
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (long long i = 0; i < n; i++) cin >> ma[MAXN + i];
  for (long long i = 1; i < n; i++) {
    cin >> k[i];
    k[i] += k[i - 1];
    pref_k[i] = pref_k[i - 1] + k[i];
    ma[MAXN + i] -= k[i];
    sum[MAXN + i] = ma[MAXN + i];
  }
  sum[MAXN] = ma[MAXN];
  for (long long i = MAXN + n; i < 2 * MAXN; i++) ma[i] = -inf;
  for (long long i = MAXN - 1; i >= 1; i--) {
    ma[i] = max(ma[i * 2], ma[i * 2 + 1]);
    sum[i] = sum[i * 2] + sum[i * 2 + 1];
  }
  long long q;
  cin >> q;
  for (long long j = 0; j < q; j++) {
    char s;
    cin >> s;
    if (s == '+') {
      long long i, x;
      cin >> i >> x;
      i--;
      long long cur = find_elem(1, 0, MAXN, i) + x;
      long long pos = find_first_greater(1, 0, MAXN, i + 1, n, cur);
      if (pos == -1) pos = n;
      update(1, 0, MAXN, i, pos, cur);
    } else {
      long long l, r;
      cin >> l >> r;
      l--;
      cout << get_sum(1, 0, MAXN, l, r) + pref_k[r - 1] -
                  (l > 0 ? pref_k[l - 1] : 0)
           << "\n";
    }
  }
}
