#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const long long INF = 1e18;
long long a[maxn], b[maxn], c[maxn];
int n, m, now;
struct SegementTree {
  long long sum, tot;
  int l, r;
};
SegementTree tr[maxn * 4];
long long cal(int l, int r) { return (c[r] - c[l]) - (r - l) * (b[l]); }
void pushup(int x) { tr[x].sum = tr[(x << 1)].sum + tr[((x << 1) | 1)].sum; }
void maintain(int x, long long tot) {
  if (tot == -INF) return;
  int l = tr[x].l, r = tr[x].r;
  tr[x].sum = (r - l + 1) * tot + (c[r] - c[l - 1]);
  tr[x].tot = tot;
}
void pushdown(int x) {
  maintain((x << 1), tr[x].tot);
  maintain(((x << 1) | 1), tr[x].tot);
  tr[x].tot = -INF;
}
void build(int x, int l, int r) {
  tr[x].l = l, tr[x].r = r;
  tr[x].tot = -INF;
  if (l == r) {
    tr[x].sum = a[l];
    return;
  }
  int mid = (l + r) >> 1;
  build((x << 1), l, mid);
  build(((x << 1) | 1), mid + 1, r);
  pushup(x);
}
long long query(int x, int l, int r, int ql, int qr) {
  if (l >= ql && r <= qr) {
    return tr[x].sum;
  }
  int mid = (l + r) >> 1;
  long long ans = 0;
  pushdown(x);
  if (ql <= mid) ans += query((x << 1), l, mid, ql, qr);
  if (qr > mid) ans += query(((x << 1) | 1), mid + 1, r, ql, qr);
  return ans;
}
void update(int x, int l, int r, int ql, int qr, long long val) {
  if (l >= ql && r <= qr) {
    maintain(x, val);
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(x);
  if (mid >= ql) update((x << 1), l, mid, ql, qr, val);
  if (mid < qr) update(((x << 1) | 1), mid + 1, r, ql, qr, val);
  pushup(x);
}
int main() {
  int x, y;
  char s[5];
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &a[i]);
  }
  for (int i = 2; i <= n; i++) {
    scanf("%I64d", &b[i]);
    b[i] += b[i - 1];
  }
  for (int i = 2; i <= n; i++) c[i] = c[i - 1] + b[i];
  build(1, 1, n);
  scanf("%d", &m);
  while (m--) {
    scanf("%s%d%d", s + 1, &x, &y);
    if (s[1] == '+') {
      int l = x, r = n;
      long long tmp = query(1, 1, n, x, x);
      while (l < r) {
        int mid = (l + r + 1) >> 1;
        long long tmp1 = query(1, 1, n, mid, mid);
        if (tmp + y + b[mid] - b[x] > tmp1)
          l = mid;
        else
          r = mid - 1;
      }
      now = x;
      update(1, 1, n, x, l, tmp + y - b[x]);
    } else {
      printf("%I64d\n", query(1, 1, n, x, y));
    }
  }
}
