#include <bits/stdc++.h>
using namespace std;
const long long M = 1e9 + 7;
const long long N = 3e6 + 7;
const double eps = 0.00000001;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
template <typename T>
inline T abs(T a, T b) {
  return a > 0 ? a : -a;
}
int n, m;
int s[N];
int i, j, k, t;
vector<int> v;
struct node {
  int i, n;
} a[N];
bool cmp(node i, node j) { return i.n > j.n; }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  t = (n + m) / k + 1;
  for (i = 0; i < n; i++) {
    scanf("%d", &j);
    if (j < t)
      s[j]++;
    else
      s[t]++;
  }
  for (i = 1; i <= m; i++) scanf("%d", &a[i].n), a[i].i = i;
  sort(a + 1, a + m + 1, cmp);
  for (i = t - 1; i >= 1; i--)
    if (s[i] > k) s[i - 1] += s[i] - k;
  if (s[0] > k) {
    printf("-1");
    return 0;
  }
  j = 1;
  for (i = t - 1; i >= 0; i--) {
    while (s[i] < k && j <= m && a[j].n >= i) {
      v.push_back(a[j].i);
      s[i]++;
      j++;
    }
  }
  k = v.size();
  printf("%d\n", k);
  for (i = 0; i < k; i++) printf("%d ", v[i]);
}
