#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; using lint=long long; template T gcd(const T& a,const T& b){ return b==0?a:gcd(b,a%b); } vector divisors(long long a){ vector res; for(long long i=1;i*i<=a;i++) if(a%i==0) { res.emplace_back(i); if(i*i>n>>m>>k>>op; vector b(m),a(n); rep(j,m) cin>>b[j], b[j]%=k; rep(i,n) cin>>a[i], a[i]%=k; sort(b.begin(),b.end()); lint ans=0; if(op=='+'){ rep(i,n){ auto p=equal_range(b.begin(),b.end(),(k-a[i])%k); ans+=p.second-p.first; } } else{ auto D=divisors(k); vector cnt(D.size()); rep(j,m) rep(l,D.size()) if(b[j]%D[l]==0) cnt[l]++; rep(i,n){ ans+=cnt[lower_bound(D.begin(),D.end(),k/gcd(a[i],k))-D.begin()]; } } cout<