#include <bits/stdc++.h>
using namespace std;
const int N = 100100;
struct nd {
  int id;
  long long z, m;
} b[N];
struct dui {
  int id, vl;
} d[N], c[N];
vector<dui> vec[N];
int a[N], tp[N], pos[N], val[N], k, n, m, tot = 0;
long long sum[N];
bool cmp(dui x, dui y) { return x.vl > y.vl; }
bool cmp2(nd x, nd y) {
  return (long long)x.z * (long long)y.m > (long long)x.m * (long long)y.z;
}
int main() {
  int i, j;
  scanf("%d%d%d", &k, &n, &m);
  for (i = 1; i <= k; i++) scanf("%d", &a[i]);
  for (i = 1; i <= n; i++) {
    scanf("%d%d%d", &tp[i], &pos[i], &val[i]);
    if (tp[i] == 1) {
      if (c[pos[i]].vl < val[i]) c[pos[i]].id = i, c[pos[i]].vl = val[i];
    } else if (tp[i] == 2)
      vec[pos[i]].push_back((dui){i, val[i]});
    else {
      b[++tot].id = i;
      b[tot].z = val[i] - 1;
      b[tot].m = 1;
    }
  }
  for (i = 1; i <= k; i++) {
    int sz = vec[i].size();
    for (j = 0; j < sz; j++) d[j + 1] = vec[i][j];
    if (a[i] < c[i].vl) d[++sz].id = c[i].id, d[sz].vl = c[i].vl - a[i];
    sort(d + 1, d + sz + 1, cmp);
    sum[0] = a[i];
    for (j = 1; j <= sz; j++) sum[j] = sum[j - 1] + d[j].vl;
    for (j = 1; j <= sz; j++) {
      b[++tot].id = d[j].id;
      b[tot].z = sum[j] - sum[j - 1];
      b[tot].m = sum[j - 1];
    }
  }
  sort(b + 1, b + tot + 1, cmp2);
  m = min(m, tot);
  printf("%d\n", m);
  for (i = 1; i <= m; i++)
    if (tp[b[i].id] == 1) printf("%d ", b[i].id);
  for (i = 1; i <= m; i++)
    if (tp[b[i].id] == 2) printf("%d ", b[i].id);
  for (i = 1; i <= m; i++)
    if (tp[b[i].id] == 3) printf("%d ", b[i].id);
  printf("\n");
  return 0;
}
