#include <bits/stdc++.h>
using namespace std;
struct food {
  long long int cou;
  long long int time;
} apple[1000010];
long long int t[1000010];
long long int ap[10000100];
long long int ansx[1000010];
long long int tree[10000010];
long long int n, m, k;
int cmp(struct food a, struct food b) {
  if (a.time == b.time && a.cou < b.cou)
    return 1;
  else if (a.time < b.time)
    return 1;
  else
    return 0;
}
void add(long long int x, long long int k) {
  while (x <= 10000001) {
    tree[x] += k;
    x += x & -x;
  }
}
long long int read(long long int k) {
  long long int sum = 0;
  while (k) {
    sum += tree[k];
    k -= k & -k;
  }
  return sum;
}
int main() {
  long long int i, temp, ans = 0, flag = 0;
  scanf("%I64d%I64d%I64d", &n, &m, &k);
  for (i = 1; i <= n; i++) {
    scanf("%I64d", &t[i]);
    ap[t[i] + 1]++;
  }
  for (i = 1; i <= m; i++) {
    scanf("%I64d", &apple[i].time);
    apple[i].cou = i;
  }
  for (i = 1; i <= n; i++) {
    if (ap[t[i] + 1] > k) {
      long long int r = ap[t[i] + 1] - k;
      long long int c = t[i];
      ap[t[i] + 1] = k;
      while (r) {
        if (c <= 1) {
          flag = 1;
          break;
        }
        if (ap[c] < k) {
          if (r > k - ap[c]) {
            r -= k - ap[c];
            ap[c] = k;
          } else {
            ap[c] += r;
            r = 0;
            break;
          }
        }
        c--;
      }
    }
  }
  for (i = 1; i <= 10000000; i++) {
    if (ap[i]) add(i, ap[i]);
  }
  for (i = 1; i <= n; i++)
    if (read(t[i] + 1) > (t[i] + 1) * k) flag = 1;
  if (flag) {
    printf("-1\n");
    return 0;
  }
  flag = 1;
  sort(apple + 1, apple + m + 1, cmp);
  temp = 0;
  for (i = 1; i <= m; i++) {
    if ((apple[i].time + 1) * k - read(apple[i].time + 1) - temp > 0) {
      ansx[ans++] = apple[i].cou;
      temp++;
    }
  }
  printf("%I64d\n", ans);
  for (i = 0; i < ans; i++) {
    if (i == 0)
      printf("%I64d", ansx[i]);
    else
      printf(" %I64d", ansx[i]);
  }
  if (ans != 0) puts("");
  return 0;
}
