using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Security.Cryptography; using Microsoft.VisualBasic; class Program { static int NN => int.Parse(ReadLine()); static long[] NList => ReadLine().Split().Select(long.Parse).ToArray(); static long[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, l, r) = (c[0], c[1], c[2]); var a = NList; WriteLine(Sort(n, l, r, a)); } static long Sort(long n, long l, long r, long[] a) { var div = new bool[n + 1]; div[0] = true; div[n] = true; var len = 60; var one = new bool[len + 1]; var zero = new bool[len + 1]; for (var b = len; b >= 0; --b) { var onetozero = -1; var zerotoone = -1; var hasonetozero = false; var haszerotoone = false; for (var i = 0; i < n; ++i) { if (div[i]) { onetozero = -1; zerotoone = -1; } else { var pb = (a[i - 1] >> b) & 1; var cb = (a[i] >> b) & 1; if (pb < cb) zerotoone = i; if (pb > cb) onetozero = i; } if (div[i + 1]) { if (zerotoone >= 0 && onetozero >= 0) { return 0; } if (zerotoone >= 0) { haszerotoone = true; div[zerotoone] = true; } if (onetozero >= 0) { hasonetozero = true; div[onetozero] = true; } } } if (hasonetozero) { if (haszerotoone) return 0; else { zero[b] = false; one[b] = true; } } else { if (haszerotoone) { zero[b] = true; one[b] = false; } else { zero[b] = true; one[b] = true; } } } return Digits(r, zero, one) - Digits(l - 1, zero, one); } static long Digits(long n, bool[] zero, bool[] one) { if (n < 0) return 0; var dp0 = new long[zero.Length]; var dp1 = new long[zero.Length]; var dpn = new long[zero.Length]; if (((n >> zero.Length - 1) & 1) == 0) { dpn[^1] = 1; } else { dp0[^1] = 1; dpn[^1] = 1; } for (var b = zero.Length - 2; b >= 0; --b) { if (zero[b]) { dp0[b] = dp0[b + 1] + dp1[b + 1]; if (((n >> b) & 1) == 0) dpn[b] = dpn[b + 1]; else dp0[b] += dpn[b + 1]; } if (one[b]) { dp1[b] = dp0[b + 1] + dp1[b + 1]; if (((n >> b) & 1) == 1) dpn[b] = dpn[b + 1]; } } return dp0[0] + dp1[0] + dpn[0]; } }