#include #include #include #include #include using namespace std; const int maxn=2*100005; int a[maxn]; int b[maxn]; int pos[maxn]; int num[maxn]; int num1[maxn]; int main(){ queueq; mapmpt; __int64 n,m,p; scanf("%I64d%I64d%I64d",&n,&m,&p); for(int i=1;i<=n;i++) scanf("%d",&a[i]); int sum=0; int len=1; for(int i=1;i<=m;i++){ scanf("%d",&b[i]); sum+=b[i]; if(mpt[b[i]]==0){ mpt[b[i]]=len; len++; } } for(int i=1;i<=m;i++){ num[mpt[b[i]]]++; } int x=0; for(__int64 i=1;i<=p;i++){ if((i+p*(m-1))>n)break; int ff=0; int s=0; for(int j=i;j<=n;j=j+p){ q.push(j); num1[mpt[a[j]]]++; ff++; s+=a[j]; if(ff> =m){ if(s==sum){ int flag=0; for(int k=1;k