#include <bits/stdc++.h>
using namespace std;
template <typename tp>
inline void read(tp& x) {
  x = 0;
  char tmp;
  bool key = 0;
  for (tmp = getchar(); !isdigit(tmp); tmp = getchar()) key = (tmp == '-');
  for (; isdigit(tmp); tmp = getchar()) x = (x << 3) + (x << 1) + (tmp ^ '0');
  if (key) x = -x;
}
template <typename tp>
inline void ckmn(tp& x, tp y) {
  x = x < y ? x : y;
}
template <typename tp>
inline void ckmx(tp& x, tp y) {
  x = x < y ? y : x;
}
const long long N = 100010;
long long k, n, m, val[N], tp[N], arr[N], acnt;
pair<long long, long long> mx[N], eff[N];
vector<pair<long long, long long> > vec[N];
bool cmp(long long a, long long b) {
  return 1ll * eff[a].first * eff[b].second >
         1ll * eff[b].first * eff[a].second;
}
signed main() {
  read(k), read(n), read(m);
  for (long long i = (1); i <= (k); ++i) read(val[i]);
  for (long long i = (1); i <= (n); ++i) {
    long long x, y, z;
    read(x), read(y), read(z);
    tp[i] = x;
    if (x == 1)
      mx[y] = max(mx[y], pair<long long, long long>(z, i));
    else if (x == 2)
      vec[y].push_back(pair<long long, long long>(z, i));
    else
      vec[0].push_back(pair<long long, long long>(z, i));
  }
  for (long long i = (1); i <= (k); ++i)
    if (mx[i].second)
      vec[i].push_back(
          pair<long long, long long>(mx[i].first - val[i], mx[i].second));
  for (long long i = (1); i <= (k); ++i)
    sort(vec[i].begin(), vec[i].end(),
         [=](pair<long long, long long> a,
             pair<long long, long long> b) -> bool { return a > b; });
  for (long long i = (0); i <= ((long long)vec[0].size() - 1); ++i)
    eff[vec[0][i].second] = pair<long long, long long>(vec[0][i].first - 1, 1);
  for (long long i = (1); i <= (k); ++i) {
    for (long long j = (0); j <= ((long long)vec[i].size() - 1); ++j) {
      if (vec[i][j].first < 0) break;
      eff[vec[i][j].second] =
          pair<long long, long long>(vec[i][j].first, val[i]);
      val[i] += vec[i][j].first;
    }
  }
  for (long long i = (1); i <= (n); ++i)
    if (eff[i].first > 0) arr[++acnt] = i;
  sort(arr + 1, arr + acnt + 1, cmp);
  long long l = min(m, acnt);
  cout << l << endl;
  sort(arr + 1, arr + l + 1,
       [=](long long a, long long b) -> bool { return tp[a] < tp[b]; });
  for (long long i = (1); i <= (l); ++i) cout << arr[i] << ' ';
  puts("");
  return 0;
}
