2 5 2 10 4 3 8 1 12 1 2 5 2 10 4 3 8 1 12 1 3
3 -1
#include<stdio.h> #include<string.h> int n,m; long long k; int p[10003],x[10003]; void quick(int a[],int left,int right) { int i,j,s; if(left<right){ s=a[(left+right)/2]; i=left-1; j=right+1; while(1){ while(a[++i]<s); while(a[--j]>s); if(i>=j) break; int t; t=a[i]; a[i]=a[j]; a[j]=t; } quick(a,left,i-1); quick(a,j+1,right); } } int main() { int t,num; long long sum,sum1; scanf("%d",&t); while(t--){ memset(x,0,sizeof(x)); num=0; sum=0; sum1=0; scanf("%d%d%lld",&n,&m,&k); for(int i=1;i<=n;i++){ scanf("%d",&x[i]); sum1+=x[i]; } for(int i=1;i<=m;i++){ scanf("%d",&p[i]); sum+=x[p[i]]; x[p[i]]=-1; } if(k<sum) printf("-1\n"); else if(k>=sum1) printf("%d\n",n); else{ quick(x,1,n); k=k-sum; num=m; for(int i=1;i<=n;i++){ if(x[i]>=0){ if(k-x[i] >= 0){ k=k-x[i]; num++; } else{ printf("%d\n",num); break; } } } } } return 0; }