from collections import deque from scipy.spatial import distance def nishin(x): x = format(x, '030b') x = list(map(int,str(x))) return x n = int(input()) start, end = map(int,input().split()) start = nishin(start) end = nishin(end) stone = list(map(int,input().split())) stone.sort() stone = list(map(nishin,stone)) queue = deque() queue.append(start) if distance.hamming(start, end) * 30 <= 1: print(0) exit() cnt = 1 vv = stone[0] while queue: v = queue.popleft() for i in stone: if distance.hamming(v, i) * 30 <= 1: if distance.hamming(i, end) * 30 <= 1: print(cnt) exit() queue.append(i) if int(''.join(map(str, v))) <= int(''.join(map(str, vv))): cnt += 1 vv = v print(-1)