#include <bits/stdc++.h>
using namespace std;

#define int long long

int const N=3e5+5;
int a[N],b[N];
int lft[N],rgt[N];
int pre[N];

int sm(int i,int j){
	return pre[j]-pre[i-1];
}
int calcu_lft(int i,int j,int t){
	int v=sm(i+1,j);
	t-=v;
	if(t<a[i])
		return 0;
	return (j-i)+(t/a[i]);
}
int calcu_rgt(int i,int j,int t){
	int v=sm(i,j-1);
	t-=v;
	if(t<a[j])
		return 0;
	return (j-i)+(t/a[j]);
}

signed main(){
	int n,m,t;
	cin>>n>>m>>t;
	for (int i = 1; i <=n; ++i){
		cin>>a[i];
		pre[i]=pre[i-1]+a[i];
	}
	//calculate lft
	deque<int> mn; 
	for(int i=1;i<=n;i++){
		while(mn.size() && a[mn.back()]>=a[i])
			mn.pop_back();
		mn.push_back(i);
		while(mn.size()>1){
			if(calcu_lft(mn[0],i,t)==0 || calcu_lft(mn[0],i,t)<=calcu_lft(mn[1],i,t))
				mn.pop_front();
			else
				break;
		}
		lft[i]=calcu_lft(mn[0],i,t);
		// cout<<lft[i]<<' ';
	}
	mn.clear();
	for(int i=n;i>=1;i--){
		while(mn.size() && a[mn[0]]>=a[i])
			mn.pop_front();
		mn.push_front(i);
		while(mn.size()>1){
			if(calcu_rgt(i,mn[mn.size()-1],t)==0 || calcu_rgt(i,mn[mn.size()-1],t)<=calcu_rgt(i,mn[mn.size()-2],t))
				mn.pop_back();
			else
				break;
		}
		rgt[i]=calcu_rgt(i,mn[mn.size()-1],t);
		// cout<<rgt[i]<<' ';
	}
	int ans=0;
	for(int i=1;i<=m;i++){
		cin>>b[i];
		ans=max(ans,max(lft[b[i]],lft[b[i]]));
	}
	cout<<ans<<endl;
	// cout<<endl;
	return 0;
}