# ax + b = 0 (mod M) (0 <= x < c) の解の個数を求める import math def kosu(a, b, c, M): d = math.gcd(a, M) if b % d > 0: return 0 a //= d b //= d M //= d x0 = (-b * pow(a, -1, M)) % M if x0 >= c: return 0 return (c - 1 - x0) // M + 1 N, K, M = map(int, input().split()) B = list(map(int, input().split())) C = list(map(int, input().split())) def remo(A): # AからK個除く cnt = K S = 0 while True: (x,y) = A.pop() S += x * y if cnt - x > 0: cnt -= x elif cnt - x == 0: return (S, A) else: A.append((x - cnt, y)) S -= (x - cnt) * y return (S, A) X = list(zip(B, C)) (S, P) = remo(list(reversed(X))) (dummy, Q)= remo(X) P.reverse() # P - Qを計算する W = [] while len(P) > 0: (x0, y0) = P.pop() (x1, y1) = Q.pop() if x0 < x1: W.append((x0, y0 - y1)) Q.append((x1 - x0, y1)) elif x0 == x1: W.append((x0, y0 - y1)) else: W.append((x1, y0 - y1)) P.append((x0 - x1, y0)) W.reverse() # 累積計算 ans = (1 if S % M == 0 else 0) for (a, b) in W: ans += kosu(b % M, (b + S) % M, a, M) S += a * b print(ans)