#include<bits/stdc++.h>
using namespace std;
int m,n,k,b[100001],c[100001],anss,ans,maxn,maxk=1e9,ti[100001];
pair<int,int>a[100001];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>m>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i].second;
ti[a[i].second];
}for(int i=1;i<=n;i){
cin>>a[i].first;
}sort(a+1,a+n+1);
for(int i=n;i>=1;i--){
if(b[a[i].second]<k){
b[a[i].second]+=a[i].first;//统计现在的经验值
if(b[a[i].second]>=k)anss++;//统计有多少个知识点达到了k
ans++;//增加题数
c[a[i].second]++;//统计每个知识点的选择题数
if(maxn<c[a[i].second])maxn=c[a[i].second],maxk=ti[a[i].second];//统计选择最多题的知识点选择了的题数
else if(maxn==c[a[i].second])maxk=min(ti[a[i].second],maxk);
//另外 maxk 存储选择了最多题的知识点总题数,以免没有足够的题去乱做,使无法让两道同样知识点的题不一起做。
}
}if(anss!=m||maxn2-1>n||maxn>n-maxk)cout<<"-1";//输出
else cout<<max(maxn2-1,ans);
return 0;
}