#include <bits/stdc++.h>
using namespace std;
const int N = 1000009;
struct data {
  int v, id;
} d[N];
int n, m, k, a[N], b[N], c[N + N];
inline void merge(int p) {
  int i = 1, j = p, k = 1;
  while (i <= n && j <= m) {
    if (a[i] < b[j])
      c[k++] = a[i++];
    else
      c[k++] = b[j++];
  }
  while (i <= n) c[k++] = a[i++];
  while (j <= m) c[k++] = b[j++];
}
inline bool chk(int p) {
  merge(p);
  int t = n + m - p + 1;
  long long now = 0, lef = k;
  for (int i = 1; i <= t; i++) {
    lef += 1ll * (c[i] - now) * k;
    now = c[i];
    lef--;
    if (lef < 0) {
      return false;
    }
  }
  return true;
}
inline bool cmp(data a, data b) { return a.v < b.v; }
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= m; i++) scanf("%d", &b[i]), d[i] = (data){b[i], i};
  sort(a + 1, a + n + 1);
  sort(b + 1, b + m + 1);
  if (!chk(m + 1)) {
    cout << "-1";
    exit(0);
  }
  int l = 1, r = m + 1, mid;
  while (l < r) {
    mid = (l + r) / 2;
    if (chk(mid))
      r = mid;
    else
      l = mid + 1;
  }
  sort(d + 1, d + m + 1, cmp);
  printf("%d\n", m - r + 1);
  for (int i = r; i <= m; i++) printf("%d ", d[i].id);
  return 0;
}
