N, L, R = map(int, input().split()) A = list(map(int, input().split())) U = 62 bit = [3] * U def dfs(d, A): if d < 0: return a0 = [] a1 = [] c01 = 0 c10 = 0 for i, a in enumerate(A): now = (a >> d) & 1 if now: a1.append(a) else: a0.append(a) if i == 0: pre = now continue if pre == 0 and now == 1: c01 += 1 if pre == 1 and now == 0: c10 += 1 pre = now pair = (c01, c10) if pair == (0, 0): bit[d] &= 3 elif pair == (0, 1): bit[d] &= 2 elif pair == (1, 0): bit[d] &= 1 else: bit[d] &= 0 if a0: dfs(d - 1, a0) if a1: dfs(d - 1, a1) dfs(U - 1, A) dp = [[[0] * 2 for _ in range(2)] for _ in range(U + 1)] dp[0][0][0] = 1 for i in range(U): shift = U-i-1 D = bit[shift] Rbit = (R >> shift) & 1 Lbit = (L >> shift) & 1 for j in range(2): for k in range(2): for d in range(2): if (D >> d) & 1: ni = i + 1 nj = j nk = k if nj == 0: if d < Rbit: nj = 1 if d > Rbit: continue if nk == 0: if d > Lbit: nk = 1 if d < Lbit: continue dp[ni][nj][nk] += dp[i][j][k] ans = 0 for j in range(2): for k in range(2): ans += dp[U][j][k] print(ans)