using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Runtime.Intrinsics.Arm; class Program { static int NN => int.Parse(ReadLine()); static long[] NList => ReadLine().Split().Select(long.Parse).ToArray(); static long[] LList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => long.Parse(ReadLine())).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, m, k) = (c[0], c[1], c[2]); var b = ReadLine().Split(); var a = LList(n); var ans = 0L; if (b[0] == "+") { var dic = new Dictionary(); foreach (var ai in a) { if (dic.ContainsKey(ai % k)) ++dic[ai % k]; else dic[ai % k] = 1; } for (var i = 0; i < m; ++i) { var bi = long.Parse(b[i + 1]); if (dic.ContainsKey((k - bi % k) % k)) ans += dic[(k - bi % k) % k]; } } else { var dic = new Dictionary(); for (var i = 0; i < m; ++i) { var bi = long.Parse(b[i + 1]); var kb = k / GCD(bi, k); if (dic.ContainsKey(kb)) ans += dic[kb]; else { var sub = 0; foreach (var ai in a) if (ai % kb == 0) ++sub; ans += sub; dic[kb] = sub; } } } WriteLine(ans); } static long GCD(long a, long b) { if (a < b) return GCD(b, a); if (a % b == 0) return b; return GCD(b, a % b); } }