#include <bits/stdc++.h>
using namespace std;
enum anva { mosavi = 1, jam = 2, zarb = 3 };
bool as(long long int a, long long int b, long long int c, long long int d) {
  if (b == 0)
    return 1;
  else if (d == 0)
    return 0;
  if (a == c && b == d) return 0;
  if (a / b != c / d) return a / b > c / d;
  return as(d, c % d, b, a % b);
}
class eshareh {
 public:
  anva k;
  long long int makan, khat, ms, mm;
  eshareh() { mm = 1; }
  const bool operator<(const eshareh &y) const {
    long long int gg = y.ms, gh = y.mm;
    return as(ms, mm, gg, gh);
  }
};
class ks {
 public:
  long long int kk;
  eshareh a1;
  bool ba1;
  vector<eshareh> dd;
  ks() { ba1 = false; }
  void push(eshareh tt) {
    if (tt.k == 2)
      dd.push_back(tt);
    else if (ba1)
      a1 = min(a1, tt);
    else {
      ba1 = true;
      a1 = tt;
    }
  }
  void tt(vector<eshareh> &kol) {
    a1.ms -= kk;
    if (ba1 && a1.ms > 0) dd.push_back(a1);
    sort(dd.begin(), dd.end());
    for (unsigned int i = 0; i < dd.size(); i++) {
      dd[i].mm = kk;
      dd[i].ms += kk;
      kk = dd[i].ms;
      kol.push_back(dd[i]);
    }
  }
};
void ezafeh(eshareh mj, vector<eshareh> &kol, vector<ks> &ksk) {
  if (mj.k == zarb) {
    if (mj.ms > 1) kol.push_back(mj);
  } else
    ksk[mj.makan].push(mj);
}
bool cmp(const eshareh &u, const eshareh &o) {
  if (u.k != o.k) return ((int)u.k < (int)o.k);
  return u < o;
}
void print(vector<eshareh> &kol, int n) {
  vector<eshareh> ll;
  sort(kol.begin(), kol.end());
  for (unsigned int i = 0; i < kol.size() && i < n; i++) ll.push_back(kol[i]);
  sort(ll.begin(), ll.end(), cmp);
  cout << ll.size() << endl;
  for (unsigned int i = 0; i < ll.size(); i++) cout << ll[i].khat << " ";
}
vector<eshareh> kol;
vector<ks> ksk;
int main() {
  int N, M, K;
  cin >> K >> N >> M;
  ksk.resize(K);
  for (int i = 0; i < K; i++) cin >> ksk[i].kk;
  eshareh nn;
  for (int i = 0; i < N; i++) {
    int ttl;
    cin >> ttl >> nn.makan >> nn.ms;
    nn.k = (anva)ttl;
    nn.khat = i + 1;
    nn.makan--;
    ezafeh(nn, kol, ksk);
  }
  for (int i = 0; i < ksk.size(); i++) ksk[i].tt(kol);
  print(kol, M);
}
