#include <bits/stdc++.h>
using namespace std;
const int MAX = int(1e5) + 10;
const long long oo = (1LL << 60);
int N;
struct bit {
  long long T[MAX];
  void put(int p, long long v) {
    for (; p <= N; p += p & -p) T[p] += v;
  }
  long long get(int p) {
    long long sum = 0;
    for (; p; p -= p & -p) sum += T[p];
    return sum;
  }
};
bit A[7][11];
long long a[MAX];
int mod(int x, int m) {
  x %= m;
  return x < 0 ? x + m : x;
}
int func(int r, int z) {
  if (r == 0) return 2;
  if (r <= z) return r;
  return 2 * z - r;
}
int main() {
  scanf("%d", &N);
  for (int i = 1; i <= N; i++) scanf("%I64d", a + i);
  for (int z = 2; z <= 6; z++)
    for (int r = 0; r < 2 * (z - 1); r++)
      for (int i = 1; i <= N; i++) {
        int rr = mod(i - 1 + r, 2 * (z - 1));
        long long v = a[i] * func(rr, z);
        A[z][r].put(i, v);
      }
  int Q;
  scanf("%d", &Q);
  int typ, p, v, lo, hi, r, rr, z;
  while (Q--) {
    scanf("%d", &typ);
    if (typ == 1) {
      scanf("%d%d", &p, &v);
      for (z = 2; z <= 6; z++)
        for (r = 0; r < 2 * (z - 1); r++) {
          rr = mod(p - 1 + r, 2 * (z - 1));
          long long tmp = (v - a[p]) * func(rr, z);
          A[z][r].put(p, tmp);
        }
      a[p] = v;
    } else {
      scanf("%d%d%d", &lo, &hi, &z);
      r = mod(2 - lo, 2 * (z - 1));
      long long ans = A[z][r].get(hi) - A[z][r].get(lo - 1);
      printf("%I64d\n", ans);
    }
  }
  return 0;
}
