#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
int h[5000005];
int p[5000005];
bool point[5000005];
queue<int> q;
struct line
{
int left,right;
}a[5000005];
bool cmp(line x,line y)
{
return x.right<y.right;
}
bool ed[5000005];
int main()
{
int n,m,t,ans=0;
cin>>n>>m>>t;
for(int i=1;i<=n;i++)
scanf("%d",&h[i]);
for(int i=1;i<=m;i++)
scanf("%d",&p[i]);
sort(p+1,p+1+m);
for(int i=1,last=0,safety=5000005;i<=m;i++)
{
int q,time;
if(safety<=last&&safety>=p[i])
{
ed[i]=1;
}
if(last<p[i])
{
q=p[i];
time=0;
}
else
{
q=last;
time=last-p[i];
}
for(;time<h[q]&&q<=n;time++,q++)
{
if(h[q]>t)
{
ed[i]=1;
safety=q;
}
}
q--;
last=q;
a[i].right=q;
}
for(int i=m,last=5000005,safety=0;i>=1;i--)
{
int q,time;
if(safety>=last&&safety<=p[i])
{
ed[i]=1;
}
if(last>p[i])
{
q=p[i];
time=0;
}
else
{
q=last;
time=p[i]-last;
}
for(;time<h[q]&&q>=1;time++,q--)
{
if(h[q]>t)
{
ed[i]=1;
safety=q;
}
}
q++;
last=q;
a[i].left=q;
}
sort(a+1,a+1+m,cmp);
for(int i=1,last=5000005;i<=m;i++)
{
if(ed[i])
{
continue;
}
if(a[i].left<=last&&last<=a[i].right)
{
// last=min(last,a[i].right);
continue;
}
ans++;
last=a[i].right;
}
if(ans)
cout<<ans+1;
else
cout<<ans;
return 0;
}