#include<bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define eps 1e-2
#define gcd __gcd
#define pb push_back
#define PI acos(-1.0)
#define lowbit(x) (x)&(-x)
#define bug printf("!!!!!\n");
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
typedef long double LD;
typedef pair<int,int> pii;
typedef unsigned long long uLL;
const int maxn = 1e6+2;
const int INF = 1<<30;
const int mod = 1e9+7;
int n,m,k,f[maxn],s[maxn];
pair<int,int> p[2][maxn];
bool cmp(pair<int,int> a,pair<int,int> b){
if(a.first==b.first) return a.second>b.second;
return a.first>b.first;
}
bool check(int x){
int i=n,j=x,now=1;
while(i||j){
int day=(now-1)/k;
if(i==0){
if(p[1][j].first<day) return 0;
--j;
}else if(j==0){
if(p[0][i].first<day) return 0;
--i;
}else{
if(p[0][i].first<=p[1][j].first){
if(p[0][i].first<day) return 0;
--i;
}else{
if(p[1][j].first<day) return 0;
--j;
}
}
++now;
}
if(i) return 0;
else return 1;
}
void solve(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++) scanf("%d",&f[i]),p[0][i]={f[i],i};
for(int i=1;i<=m;i++){scanf("%d",&s[i]);p[1][i]={s[i],i};}
sort(p[0]+1,p[0]+1+n,cmp);
sort(p[1]+1,p[1]+1+m,cmp);
int l=0,r=m;
while(l<r){
int mid=(l+r+1)>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
if(check(l)==0){
cout<<-1<<endl;
return ;
}
cout<<l<<endl;
for(int i=l;i>=1;i--){
cout<<p[1][i].second<<" ";
}cout<<endl;
return;
}
int main()
{
int t = 1;
while(t--){
solve();
}
return 0;
}