#include <bits/stdc++.h>
using namespace std;
const long long int siz = 1e6 + 5, l_INF = -2e9;
long long int n, m, a[siz], b[siz], qb[siz], qqb[siz], u[siz], f[siz * 4],
    mrk[siz * 4];
char ch;
void build(long long int l, long long int r, long long int o) {
  if (l == r) {
    f[o] = u[l];
    return;
  }
  long long int mid = (l + r) >> 1;
  build(l, mid, o * 2);
  build(mid + 1, r, o * 2 + 1);
  f[o] = f[o * 2] + f[o * 2 + 1];
}
void pushdown(long long int l, long long int r, long long int o) {
  long long int mid = (l + r) >> 1;
  mrk[o * 2] = mrk[o];
  mrk[o * 2 + 1] = mrk[o];
  f[o * 2] = mrk[o * 2] * (mid - l + 1);
  f[o * 2 + 1] = mrk[o * 2 + 1] * (r - mid);
  mrk[o] = l_INF;
}
long long int query(long long int l, long long int r, long long int o,
                    long long int s, long long int t) {
  if (l == s && r == t) {
    return f[o];
  }
  if (mrk[o] != l_INF) pushdown(l, r, o);
  long long int mid = (l + r) >> 1;
  if (t <= mid)
    return query(l, mid, o * 2, s, t);
  else if (s > mid)
    return query(mid + 1, r, o * 2 + 1, s, t);
  else
    return query(l, mid, o * 2, s, mid) +
           query(mid + 1, r, o * 2 + 1, mid + 1, t);
}
void update(long long int l, long long int r, long long int o, long long int s,
            long long int t, long long int k) {
  if (l == s && r == t) {
    f[o] = k * (r - l + 1);
    mrk[o] = k;
    return;
  }
  if (mrk[o] != l_INF) pushdown(l, r, o);
  long long int mid = (l + r) >> 1;
  if (t <= mid)
    update(l, mid, o * 2, s, t, k);
  else if (s > mid)
    update(mid + 1, r, o * 2 + 1, s, t, k);
  else
    update(l, mid, o * 2, s, mid, k),
        update(mid + 1, r, o * 2 + 1, mid + 1, t, k);
  f[o] = f[o * 2] + f[o * 2 + 1];
}
long long int low_bound(long long int l, long long int r, long long int k) {
  while (l < r) {
    long long int mid = ((l + r) >> 1) + 1;
    if (query(1, n, 1, mid, mid) <= k) {
      l = mid;
    } else {
      r = mid - 1;
    }
  }
  return l;
}
int main() {
  scanf("%lld", &n);
  for (long long int i = 1; i <= 4 * n; i++) mrk[i] = l_INF;
  for (long long int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
  }
  for (long long int i = 1; i <= n; i++) {
    if (i != n) scanf("%lld", &b[i]);
    qb[i] = qb[i - 1] + b[i];
    qqb[i] = qqb[i - 1] + qb[i];
    u[i] = a[i] - qb[i - 1];
  }
  scanf("%lld", &m);
  build(1, n, 1);
  for (long long int i = 1; i <= m; i++) {
    scanf(" %c", &ch);
    if (ch == '+') {
      long long int t, x;
      scanf("%lld%lld", &t, &x);
      long long int now = query(1, n, 1, t, t);
      long long int id = low_bound(t, n, now + x);
      update(1, n, 1, t, id, x + now);
    } else {
      long long int l, r;
      scanf("%lld%lld", &l, &r);
      printf("%lld\n",
             query(1, n, 1, l, r) + qqb[r - 1] - qqb[l - 2 < 0 ? 0 : l - 2]);
    }
  }
  return 0;
}
