#include <bits/stdc++.h>
using namespace std;
int n, a, b, c, k;
inline bool canbuy(vector<int> &vec) {
  int day = 0;
  for (int i = 1; i <= vec.size(); i++) {
    if (vec[i - 1] < day) {
      return false;
    }
    if (i % k == 0) day++;
  }
  return true;
}
void solve() {
  char car, car2;
  string s, st, str;
  long long d = 0, e = 0, m = 0, q = 0, r = 0, l = 0, middle = 0, count = 0,
            add = 0, ans = 0, temp = 0, rootsa, save = 0, bigg = 0, smol = 0,
            odd = 0, even = 0, save2 = 0, counter = 0, counter2 = 0, sum = 0, x,
            y, w, h;
  bool flag = false, flag2;
  int nextavailabletime = 0;
  vector<int> has;
  vector<pair<int, int>> shop;
  cin >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    cin >> a;
    has.push_back(a);
  }
  sort(has.begin(), has.end());
  if (canbuy(has) == false) {
    cout << -1;
    return;
  }
  for (int i = 0; i < m; i++) {
    cin >> a;
    shop.push_back(make_pair(a, i));
  }
  sort(shop.begin(), shop.end());
  reverse(shop.begin(), shop.end());
  l = 0, r = m;
  while (l <= r) {
    middle = (l + r) / 2;
    vector<int> tempvec;
    tempvec.clear();
    int index1 = 0, index2 = middle - 1;
    for (int i = 0; i < n + middle; i++) {
      if (index1 != n && (has[index1] < shop[index2].first || index2 == -1)) {
        tempvec.push_back(has[index1]);
        index1++;
      } else {
        tempvec.push_back(shop[index2].first);
        index2--;
      }
    }
    if (canbuy(tempvec)) {
      l = middle + 1;
      ans = middle;
    } else
      r = middle - 1;
  }
  cout << ans << '\n';
  for (int i = 0; i < ans; i++) cout << shop[i].second + 1 << " ";
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cout << fixed << setprecision(0);
  int t = 1;
  while (t--) {
    solve();
    cout << '\n';
  }
  return 0;
}
