#include <bits/stdc++.h>
using namespace std;
int const maxn = 2000008;
int f[maxn], temp[maxn];
int n, m, k;
struct PP {
  int v, num;
  bool operator<(PP x) const { return v > x.v; }
} s[maxn];
bool judge(int x) {
  for (int i = 0; i < n; i++) {
    temp[i] = f[i];
  }
  for (int i = 0; i < x; i++) {
    temp[n + i] = s[i].v;
  }
  sort(temp, temp + n + x);
  int number = 0, day = 0;
  while (1) {
    for (int i = 0; i < k; i++) {
      if (n + x <= number) return true;
      if (temp[number] < day) return false;
      number++;
    }
    day++;
  }
  return true;
}
int lower_max(int len) {
  int first = len - 1;
  int mid, half;
  while (len > 0) {
    half = len / 2;
    mid = first - half;
    if (judge(mid) == true) {
      len = half;
    } else {
      first = mid - 1;
      len = len - half - 1;
    }
  }
  return first;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; i++) {
    scanf("%d", &f[i]);
  }
  sort(f, f + n);
  for (int i = 0; i < m; i++) {
    scanf("%d", &s[i].v);
    s[i].num = i + 1;
  }
  sort(s, s + m);
  if (judge(0) == false) {
    printf("-1\n");
  } else {
    int number = lower_max(m + 1);
    printf("%d\n", number);
    if (number == 0) return 0;
    printf("%d", s[0].num);
    for (int i = 1; i < number; i++) {
      printf(" %d", s[i].num);
    }
    printf("\n");
  }
}
