#include <bits/stdc++.h>
using namespace std;
struct _ {
  ios_base::Init i;
  _() {
    cin.sync_with_stdio(0);
    cin.tie(0);
  }
} _;
struct operation {
  long long type, val;
  int id;
  operation() : id(-1){};
  operation(long long type, long long val, int id)
      : type(type), val(val), id(id) {}
};
long long a[100100];
int k, n, m;
struct rational {
  long long num, denom;
  int id, type;
  rational() {}
  rational(long long num, long long denom, int id, int type)
      : num(num), denom(denom), id(id), type(type) {}
  bool operator<(const rational& S) const {
    return num * S.denom > S.num * denom;
  }
};
struct type_comper {
  bool operator()(const operation& A, const operation& B) const {
    if (A.type > 2 || B.type > 2) {
      if (A.type != B.type) return A.type < B.type;
    }
    return A.val > B.val;
  }
};
int main(int argc, char** argv) {
  cin >> k >> n >> m;
  for (int i = (0); i < (k); ++i) cin >> a[i];
  vector<operation> op[100100];
  vector<operation> type_one_cache(k);
  for (int i = (0); i < (n); ++i) {
    long long type;
    long long idx;
    long long val;
    cin >> type >> idx >> val;
    idx--;
    if (type == 1) {
      if (a[idx] < val) {
        if (type_one_cache[idx].id == -1 ||
            type_one_cache[idx].val < val - a[idx]) {
          type_one_cache[idx] = operation(type, val - a[idx], i + 1);
        }
      }
      continue;
    }
    op[idx].push_back(operation(type, val, i + 1));
  }
  vector<rational> ratio;
  for (int i = (0); i < (k); ++i) {
    if (type_one_cache[i].id != -1) {
      op[i].push_back(type_one_cache[i]);
    }
    sort(op[i].begin(), op[i].end(), type_comper());
    long long pre = a[i];
    for (auto oper : op[i]) {
      if (oper.type == 1) {
        ratio.push_back(rational(oper.val, pre, oper.id, 1));
        pre += oper.val;
      }
      if (oper.type == 2) {
        ratio.push_back(rational(oper.val, pre, oper.id, 2));
        pre += oper.val;
      }
      if (oper.type == 3) {
        ratio.push_back(rational(oper.val - 1, 1, oper.id, 3));
      }
    }
  }
  sort(ratio.begin(), ratio.end());
  vector<pair<int, int> > res;
  for (int i = (0); i < (min(m, (int)ratio.size())); ++i) {
    if (ratio[i].num <= 0) break;
    res.push_back(make_pair(ratio[i].type, ratio[i].id));
  }
  sort(res.begin(), res.end());
  cout << res.size() << endl;
  for (auto i : res) {
    cout << i.second << " ";
  }
  return 0;
}
