#include <bits/stdc++.h>
using namespace std;
const int maxn = 111111;
int n, m, q;
long long a[maxn];
int h[maxn];
int cnt[maxn][360];
int res, id[maxn];
long long sum[maxn];
long long add[maxn];
vector<int> g[maxn], gg[maxn];
int main() {
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &a[i]);
  }
  memset(cnt, 0, sizeof(cnt));
  memset(sum, 0, sizeof(sum));
  memset(add, 0, sizeof(add));
  int nn = sqrt(n + 0.5), res = 0;
  for (int i = 1; i <= m; i++) {
    int num, temp;
    scanf("%d", &num);
    if (num >= nn)
      h[i] = 1, id[++res] = i;
    else
      h[i] = 0;
    for (int j = 0; j < num; j++) {
      scanf("%d", &temp);
      g[i].push_back(temp);
      if (h[i]) {
        sum[i] += a[temp];
        gg[temp].push_back(res);
      }
    }
  }
  for (int i = 1; i <= m; i++) {
    for (int j = 0; j < (int)g[i].size(); j++) {
      int u = g[i][j];
      for (int k = 0; k < (int)gg[u].size(); k++) {
        int v = gg[u][k];
        cnt[i][v]++;
      }
    }
  }
  while (q--) {
    int k, x;
    char op[10];
    scanf("%s%d", op, &k);
    if (op[0] == '?') {
      long long ans = 0;
      if (h[k]) {
        ans = sum[k];
        for (int i = 1; i <= res; i++) {
          ans += add[id[i]] * cnt[k][i];
        }
      } else {
        for (int i = 0; i < (int)g[k].size(); i++) {
          ans += a[g[k][i]];
        }
        for (int i = 1; i <= res; i++) {
          ans += add[id[i]] * cnt[k][i];
        }
      }
      printf("%I64d\n", ans);
    } else {
      scanf("%d", &x);
      if (h[k])
        add[k] += x;
      else {
        for (int i = 0; i < (int)g[k].size(); i++) {
          a[g[k][i]] += x;
        }
        for (int i = 1; i <= res; i++) {
          sum[id[i]] += x * cnt[k][i];
        }
      }
    }
  }
  return 0;
}
