zmnXAglTcg
#include <map>
#include <cmath>
#include <stack>
#include <queue>
#include <limits>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define Sci(x) scanf(“%d”,&x)
#define Sci2(x, y) scanf(“%d%d”,&x,&y)
#define Sci3(x, y, z) scanf(“%d%d%d”,&x,&y,&z)
#define Scl(x) scanf(“%I64d”,&x)
#define Scl2(x, y) scanf(“%I64d%I64d”,&x,&y)
#define Scl3(x, y, z) scanf(“%I64d%I64d%I64d”,&x,&y,&z)
#define Pri(x) printf(“%d\n”,x)
#define Prl(x) printf(“%I64d\n”,x)
#define For(i,x,y) for(int i=x;i<y;i++)
#define FFor(i,x,y) for(int i=x;i>y;i–)
#define For_(i,x,y) for(int i=x;i<=y;i++)
#define FFor_(i,x,y) for(int i=x;i>=y;i–)
#define Mem(f, x) memset(f,x,sizeof(f))
#define LL long long
#define ULL unsigned long long
#define MAXSIZE 200010
#define INF 0x3f3f3f3f
const int mod = 1e9+7;
const double PI = acos(-1.0);
//using namespace std;
int next[MAXSIZE];
int n,m,k;
void getnext(int a[])
{
int i=0;
int j=-1;
next[0]=-1;
while(i<m)
{
if(j==-1||a[i]==a[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int kmp(int s[],int p[])
{
int i=0;
int j=0;
getnext(p);
int cnt=0;
while(i<n)
{
if(j==-1||(s[i]+p[j])%k==0)
{
i++;
j++;
}
else
{
j=next[j];
if(j==m)
{
j=next[j];
cnt++;
}
}
}
return cnt;
}
int main()
{
int t;
Sci(t);
int a[MAXSIZE];
int b[MAXSIZE];
while(t–)
{
Sci3(n,m,k);
For_(i,0,n-1)
Sci(a[i]);
For_(i,0,m-1)
Sci(b[i]);
For_(i,0,n-2)
a[i]=(a[i+1]-a[i]+k)%k;
For_(i,0,m-2)
b[i]=(b[i+1]-b[i]+k)%k;
n–;
m–;
int ans=kmp(a,b);
Pri(ans);
}
return 0;
}