#include using namespace std; using ll = long long; template vector divisor(T n) { vector res; for (T i = 1; i * i <= n; i++) { if (n % i == 0) { res.emplace_back(i); if (i != n / i) res.emplace_back(n / i); } } return res; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); int n, m; cin >> n >> m; ll K; cin >> K; char op; cin >> op; vector b(m); for (int i = 0; i < m; ++i) { cin >> b[i]; } sort(b.begin(), b.end()); vector a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } sort(a.begin(), a.end()); if (op == '+') { map cntb; for (int i = 0; i < m; ++i) { cntb[b[i] % K]++; } ll ans = 0; for (int i = 0; i < n; ++i) { ans += cntb[(K - a[i] % K) % K]; } cout << ans << "\n"; } else { map cntb; for (int i = 0; i < m; ++i) { cntb[__gcd(b[i], K)]++; } map cnta; for (int i = 0; i < n; ++i) { cnta[__gcd(a[i], K)]++; } vector ds = divisor(K); ll ans = 0; //cerr << ans << endl; for (ll x : ds) { for (ll y : ds) { if (x * y % K != 0) continue; ans += cnta[x] * cntb[y]; } } cout << ans << "\n"; } return 0; }