#include #include #include #include #include using namespace std; #define int long long vector Divisors(int N) { vector divisors; for (int i = 1; i <= N; i++) { if (i * i >= N) { break; } else if (N % i == 0) { divisors.push_back(i); } } int i = sqrt(N); if (i * i == N) { divisors.push_back(i); for (int j = divisors.size() - 1; j >= 0; j--) { divisors.push_back(N / divisors[j]); } } else { for (int j = divisors.size() - 1; j >= 0; j--) { divisors.push_back(N / divisors[j]); } } return divisors; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N, M, K; cin >> N >> M >> K; string op; cin >> op; vector B(M); for (int m = 0; m < M; m++) { cin >> B[m]; } vector A(N); for (int n = 0; n < N; n++) { cin >> A[n]; } long long ans; if (op == "+") { unordered_map cnt; for (int b : B) { cnt[b % K]++; } ans = 0; for (int a : A) { ans += cnt[((-a) % K+K)%K]; } cout << ans << endl; } else { unordered_map cnt; vector D = Divisors(K); for (int b : B) { for (int d : D) { if (b % d == 0) { cnt[d]++; } } } ans = 0; for (int a : A) { int g = __gcd(a, K); ans += cnt[K / g]; } cout << ans << endl; } return 0; }