#include <bits/stdc++.h>
using namespace std;
template <typename T>
T next_int() {
  T x = 0, p = 1;
  char ch;
  do {
    ch = getchar();
  } while (ch <= ' ');
  if (ch == '-') {
    p = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + (ch - '0');
    ch = getchar();
  }
  return x * p;
}
const int max_n = (int)2e5 + 227 + 1;
const int max_int = (int)1e9 + 227 + 1;
const int mod = (int)1e9 + 7;
struct DROB {
  long long a;
  long long b;
};
bool cmp(pair<DROB, int> &f, pair<DROB, int> &s) {
  return (f.first.a * s.first.b > f.first.b * s.first.a);
}
int main() {
  int k = next_int<int>();
  int n = next_int<int>();
  int m = next_int<int>();
  vector<long long> a(k);
  for (int i = 0; i < k; i++) a[i] = next_int<int>();
  vector<pair<long long, int> > c(k);
  for (int i = 0; i < k; i++) c[i] = make_pair(0, -1);
  vector<vector<pair<long long, int> > > e(k);
  vector<long long> type(n), it(n), be(n);
  vector<pair<DROB, int> > b;
  for (int i = 0; i < n; i++) {
    type[i] = next_int<int>();
    it[i] = next_int<int>() - 1;
    be[i] = next_int<int>();
    if (type[i] == 3) {
      DROB xex;
      xex.a = be[i] - 1;
      xex.b = 1;
      b.push_back(make_pair(xex, i));
    }
    if (type[i] == 2) {
      e[it[i]].push_back(make_pair(be[i], i));
    }
    if (type[i] == 1) {
      if (be[i] > c[it[i]].first) {
        c[it[i]] = make_pair(be[i], i);
      }
    }
  }
  for (int i = 0; i < k; i++) {
    if (c[i].first > a[i]) {
      e[i].push_back(make_pair(c[i].first - a[i], c[i].second));
    }
    sort(e[i].begin(), e[i].end());
    reverse(e[i].begin(), e[i].end());
    long long sum = a[i];
    for (int j = 0; j < e[i].size(); j++) {
      DROB mda;
      mda.a = e[i][j].first;
      mda.b = sum;
      sum += e[i][j].first;
      b.push_back(make_pair(mda, e[i][j].second));
    }
  }
  sort(b.begin(), b.end(), cmp);
  vector<pair<int, int> > ans;
  for (int i = 0; i < b.size() && m; i++) {
    b[i].first.a += b[i].first.b;
    if (b[i].first.a < b[i].first.b) break;
    ans.push_back(make_pair(type[b[i].second], b[i].second + 1));
    m--;
  }
  sort(ans.begin(), ans.end());
  cout << ans.size() << "\n";
  for (int i = 0; i < ans.size(); i++) cout << ans[i].second << " ";
  puts("");
}
