cas = int(input()) def gcdExtended(a, b): # Base Case if a == 0 : return b,0,1 gcd,x1,y1 = gcdExtended(b%a, a) # Update x and y using results of recursive # call x = y1 - (b//a) * x1 y = x1 return gcd,x,y def sol(x,y,m,d): x = abs(x - y) % m g,a,b = gcdExtended(d,m) if x % g != 0: return -1 # print(g,a,b,d,m) am = m // g a1 = a * (x // g) a1 = abs(a1) % am # print(a1,am) return min(a1,am-a1) def run(): n,m,d = map(int, input().split()) a = [*map(int, input().split())] ans=0 for i in range(n//2): t = sol(a[i], a[n-1-i], m, d) if t == -1: return 'IMPOSSIBLE' ans += t return ans for ca in range(cas): ans = run() print(f'Case #{ca+1}: {ans}')