#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define il inline
#define re register
const int N=550;
int n,m,a[N],b[N],dp[N][N][N<<1],idx;
int tmp[N<<1],tot;
il int read(){
re int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
int main(){
n=read();
for(re int i=1;i<=n;i++)a[i]=read(),tmp[++idx]=a[i];
m=read();
for(re int j=1;j<=m;j++)b[j]=read(),tmp[++idx]=b[j];
sort(tmp+1,tmp+1+idx);
tot=unique(tmp+1,tmp+1+idx)-tmp-1;
for(re int i=1;i<=n;i++)a[i]=lower_bound(tmp+1,tmp+1+tot,a[i])-tmp;
for(re int j=1;j<=m;j++)b[j]=lower_bound(tmp+1,tmp+1+tot,b[j])-tmp;
for(re int i=1;i<=n;i++){
for(re int j=1;j<=m;j++){
for(re int k=1;k<=tot;k++)dp[i][j][k]=max(dp[i-1][j][k],dp[i][j-1][k]);
if(a[i]==b[j]){
dp[i][j][a[i]]=max(dp[i][j][a[i]],1);
for(re int k=1;k<a[i];k++)dp[i][j][a[i]]=max(dp[i][j][a[i]],dp[i][j][k]+1);
}
}
}
int ans=-1;
for(re int i=1;i<=tot;i++)ans=max(ans,dp[n][m][i]);
printf("%d",ans);
return 0;
}