#include "bits/stdc++.h" using namespace std; #define int long long #define REP(i,n) for(int i = 0;i < (int)(n);i++) #define RREP(i,n) for(int i = (int)n-1;i >= 0;i--) #define FOR(i,s,n) for(int i = s;i < (int)n;i++) #define RFOR(i,s,n) for(int i = (int)n-1;i >= s;i--) #define ALL(a) a.begin(),a.end() #define IN(a, x, b) (a<=x && xinline void out(T t){cout<inline void out(T t,Ts... ts){cout<inline bool CHMAX(T&a,T b){if(ainline bool CHMIN(T&a,T b){if(a>b){a = b;return true;}return false;} constexpr long long INF = 1e18; int gcd(int x,int y) { if(x==0) return y; return gcd(y%x,x); } int lcm(int x, int y) { return (x * y / gcd(x, y)); } signed main(){ int N,M,K; cin >> N >> M >> K; char c; cin >> c; vectora(N),b(M); REP(i,M)cin >> b[i]; REP(i,N)cin >> a[i]; sort(ALL(a)); sort(ALL(b)); int ans = 0; if(c == '+'){ mapmp; REP(i,N){ ++mp[a[i]%K]; } mapused; REP(i,M){ ans += mp[(K-b[i])%K]; } }else{ mapamp; mapbmp; REP(i,N)amp[gcd(a[i],K)]++; REP(i,M)bmp[gcd(b[i],K)]++; for(auto e:amp){ for(auto ee:bmp){ if(e.first*ee.first%K==0)ans+=e.second*ee.second; } } } out(ans); }