#include <bits/stdc++.h>
using namespace std;
int k, n, m;
vector<pair<int, int> > L[100005];
int li[100005];
int sr[100005];
set<pair<double, int> > S;
int T[100005];
int I[100005];
int B[100005];
int pk[100005];
long long a[100005];
long long A[100005];
int main() {
  if (!1)
    freopen(
        ""
        ".in",
        "r", stdin);
  if (!1)
    freopen(
        ""
        ".out",
        "w", stdout);
  int i, j;
  while (~scanf("%d%d%d", &k, &n, &m)) {
    for (i = 1; i <= k; i++) L[i].clear();
    S.clear();
    for (i = 1; i <= k; i++) scanf("%I64d", &a[i]), A[i] = -1;
    for (i = 1; i <= n; i++) scanf("%d%d%d", &T[i], &I[i], &B[i]);
    for (i = 1; i <= n; i++) {
      pk[i] = 0;
      if (T[i] == 1) {
        if (B[i] > a[I[i]] && (A[I[i]] == -1 || B[i] > B[A[I[i]]])) A[I[i]] = i;
      } else if (T[i] == 2)
        L[I[i]].push_back(make_pair(B[i], i));
      else
        S.insert(make_pair(B[i], i));
    }
    for (i = 1; i <= k; i++)
      if (~A[i]) L[i].push_back(make_pair(B[A[i]] - a[i], A[i]));
    for (i = 1; i <= k; i++) {
      sr[i] = 0;
      sort(L[i].begin(), L[i].end());
      li[i] = 0;
      reverse(L[i].begin(), L[i].end());
      if (!L[i].empty()) {
        double x = L[i][0].first;
        S.insert(make_pair((a[i] + x) / a[i], L[i][0].second));
        li[i]++;
      }
    }
    while (!S.empty() && m) {
      pair<double, int> tp = *(--S.end());
      S.erase(--S.end());
      int id = tp.second;
      m--;
      pk[id] = 1;
      if (T[id] != 3 && li[I[id]] < L[I[id]].size()) {
        int u = I[id];
        int v = L[u][li[u]].second;
        a[u] += L[u][li[u] - 1].first;
        double x = L[u][li[u]].first;
        S.insert(make_pair((a[u] + x) / a[u], L[u][li[u]++].second));
      }
    }
    int cnt = 0;
    for (i = 1; i <= n; i++) cnt += pk[i];
    printf("%d\n", cnt);
    for (j = 1; j <= 3; j++)
      for (i = 1; i <= n; i++)
        if (pk[i] && T[i] == j) printf("%d ", i);
    printf("\n");
  }
  return 0;
}
