#include <bits/stdc++.h>
using namespace std;
int T;
double pi = acos(-1.0);
vector<long long> v;
long long factorial(long long x) {
  long long total = 1;
  for (int i = 2; i <= x; i++) total *= i;
  return total;
}
bool isprime(long long x) {
  vector<bool> prime(x + 1, 1);
  prime[0] = prime[1] = 0;
  for (long long i = 2; i * i <= x; i++)
    if (prime[i])
      for (long long j = i * i; j <= x; j += i) prime[j] = 0;
  return prime[x];
}
long long gcd(long long a, long long b) {
  if (b == 0)
    return a;
  else
    return gcd(b, a % b);
}
long long lcm(long long a, long long b) { return (a * b) / gcd(a, b); }
long long temp = 1;
long long fastpow(long long base, long long exponent) {
  if (exponent == 0) return 1;
  if (exponent == 1) return (temp * base);
  if (exponent % 2 == 0)
    return fastpow(base * base, exponent / 2);
  else {
    temp *= base;
    fastpow(base * base, exponent / 2);
  }
}
int n, m, k;
int size = (int)1e7 + 1;
vector<int> has((int)1e7 + 1);
pair<int, int> shop[(int)1e7 + 1];
vector<int> all;
int fqhas[(int)1e7 + 1];
bool can(int mid) {
  for (int i = 0; i < all.size(); i++) {
    fqhas[all[i]] = 0;
  }
  for (int i = 0; i < n; i++) {
    fqhas[has[i]]++;
  }
  for (int i = 0; i < mid; i++) {
    fqhas[shop[i].first]++;
  }
  int day = 0, c = 0;
  for (int i = 0; i < all.size(); i++) {
    while (fqhas[all[i]] > 0) {
      fqhas[all[i]]--;
      if (c == k) {
        day++;
        c = 0;
      }
      if (day > all[i]) {
        return false;
      }
      c++;
    }
  }
  return true;
}
void solve() {
  cin >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    cin >> has[i];
    all.push_back(has[i]);
  }
  for (int i = 0; i < m; i++) {
    cin >> shop[i].first;
    shop[i].second = i;
    all.push_back(shop[i].first);
  }
  sort(shop, shop + m);
  reverse(shop, shop + m);
  sort(all.begin(), all.end());
  int low = 0, hi = m, best = -1;
  while (low <= hi) {
    int mid = (low + hi) / 2;
    if (can(mid)) {
      best = mid;
      low = mid + 1;
    } else {
      hi = mid - 1;
    }
  }
  cout << best << endl;
  for (int i = 0; i < best; i++) {
    cout << shop[i].second + 1 << +" ";
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  { solve(); }
  return 0;
}
