#include <bits/stdc++.h>
using namespace std;
struct lsg {
  long long x, y, z, zz;
} z1[1000000], z2[1000000];
struct kkk {
  double x;
  long long y, z;
} z[1000000];
long long n, m, k, f[1000000], c, x, y, d, d1, d2;
bool pd(lsg x, lsg y) { return x.x < y.x || x.x == y.x && x.y > y.y; }
bool pd1(kkk x, kkk y) { return x.x > y.x; }
bool pd2(kkk x, kkk y) { return x.z < y.z; }
signed main() {
  ios::sync_with_stdio(false);
  cin >> k >> n >> m;
  for (long long i = 1; i <= k; i++) cin >> f[i];
  for (long long i = 1; i <= n; i++) {
    cin >> c >> x >> y;
    if (c == 1) z1[++d1].x = x, z1[d1].y = y, z1[d1].z = i, z1[d1].zz = c;
    if (c == 2) z2[++d2].x = x, z2[d2].y = y, z2[d2].z = i, z2[d2].zz = c;
    if (c == 3) z[++d].x = y, z[d].y = i, z[d].z = c;
  }
  sort(z1 + 1, z1 + 1 + d1, pd);
  for (long long i = 1; i <= d1; i++)
    if (z1[i].x != z1[i - 1].x && z1[i].y > f[z1[i].x])
      z2[++d2].x = z1[i].x, z2[d2].y = z1[i].y - f[z1[i].x], z2[d2].z = z1[i].z,
      z2[d2].zz = z1[i].zz;
  sort(z2 + 1, z2 + 1 + d2, pd);
  for (long long i = 1; i <= d2; i++)
    z[++d].x = 1.0 * (z2[i].y + f[z2[i].x]) / f[z2[i].x], z[d].y = z2[i].z,
    z[d].z = z2[i].zz, f[z2[i].x] += z2[i].y;
  sort(z + 1, z + 1 + d, pd1);
  d = min(d, m);
  cout << d << endl;
  sort(z + 1, z + 1 + d, pd2);
  for (long long i = 1; i <= d; i++) cout << z[i].y << ' ';
  cout << endl;
}
