#include <bits/stdc++.h>
using namespace std;
const int M = 1e5 + 10, rad = 333;
long long int a[M], sum[M], added[M];
bool o[rad][M];
int inter[rad][M], n, m, q;
vector<int> s[M], h;
long long int lquery(int k) {
  long long int ret = 0;
  for (int i = 0; i < s[k].size(); i++) ret += a[s[k][i]];
  for (int i = 0; i < h.size(); i++)
    ret += (long long int)inter[i][k] * added[h[i]];
  return ret;
}
long long int hquery(int k) { return sum[k]; }
int main() {
  cin >> n >> m >> q;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < m; i++) {
    int sz;
    cin >> sz;
    for (int j = 0; j < sz; j++) {
      int k;
      cin >> k;
      k--;
      sum[i] += a[k];
      s[i].push_back(k);
    }
    if (sz > rad) {
      for (int j = 0; j < s[i].size(); j++) o[h.size()][s[i][j]] = true;
      h.push_back(i);
    }
  }
  for (int i = 0; i < m; i++)
    for (int j = 0; j < s[i].size(); j++)
      for (int k = 0; k < h.size(); k++)
        if (o[k][s[i][j]]) inter[k][i]++;
  while (q--) {
    char c;
    cin >> c;
    if (c == '?') {
      int k;
      cin >> k;
      k--;
      if (s[k].size() > rad)
        cout << hquery(k) << endl;
      else
        cout << lquery(k) << endl;
    } else {
      int k, x;
      cin >> k >> x;
      k--;
      for (int i = 0; i < h.size(); i++)
        sum[h[i]] += (long long int)inter[i][k] * x;
      if (s[k].size() > rad)
        added[k] += x;
      else
        for (int i = 0; i < s[k].size(); i++) a[s[k][i]] += x;
    }
  }
  return 0;
}
