#include <cstdio>
#include <algorithm>
#include <set>
#include <queue>

using namespace std;

int n, m, lim, ans[101010];
struct BG{ int lv, id; } bug[101010];
struct ST{ int lv, cost, id; } st[101010];

bool cmp(BG a, BG b){ return a.lv > b.lv; }
bool cmp2(ST a, ST b){
    if( a.lv == b.lv ) return a.cost < b.cost;
    return a.lv > b.lv;
}
bool operator<(ST a, ST b){ return a.cost > b.cost; }

bool f(int t)
{
    priority_queue<ST> Q;
    while(!Q.empty()) Q.pop();
    int C = 0;
    ST temp;
    for(int i = 0, j = 0 ; i < m ; i+=t )
    {
        while( j < n && st[j].lv >= bug[i].lv ) Q.push(st[j++]);
        if( Q.size() == 0 ) return false;
        temp = Q.top();
        C += temp.cost;
        if( C > lim ) return false;
        Q.pop();
        for(int k = i ; k < i+t && k < m ; k++ )
            ans[bug[k].id] = temp.id;
    }
    return true;
}

int main()
{
    freopen(".43.in","r",stdin);
    freopen(".43.out","w",stdout);
    scanf("%d%d%d", &n, &m, &lim);
    for(int i = 0 ; i < m ; i++ ) scanf("%d", &bug[i].lv), bug[i].id = i+1;
    for(int i = 0 ; i < n ; i++ ) scanf("%d", &st[i].lv);
    for(int i = 0 ; i < n ; i++ ) scanf("%d", &st[i].cost), st[i].id = i+1;
    sort(bug, bug+m, cmp);
    sort(st, st+n, cmp2);
    int lb = 0, ub = m, cur;
    if( !f(m) ){ puts("-1"); return 0; }
    while( lb < ub )
    {
        cur = (lb+ub-1)/2;
        if( f(cur) ) ub = cur;
        else lb = cur+1;
    }
    /*f(ub);
    puts("YES");
    for(int i = 1 ; i <= m ; i++ ) printf("%d ", ans[i]);
        */
    printf("%d\n",ub);
}
