using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static long[] NList => ReadLine().Split().Select(long.Parse).ToArray(); public static void Main() { Solve(); } static void Solve() { var c = NList; var (n, m, k) = (c[0], c[1], c[2]); var a = NList; var sets = new HashSet[4]; for (var i = 0; i < sets.Length; ++i) sets[i] = new HashSet(); sets[0].Add(0); for (var i = 0; i <= n; ++i) { var ai = i == n ? 0 : a[i]; sets[1].Add(ai); for (var j = 0; j <= n; ++j) { var aj = j == n ? 0 : a[j]; sets[2].Add(ai + aj); for (var p = 0; p <= n; ++p) { var ap = p == n ? 0 : a[p]; sets[3].Add(ai + aj + ap); } } } var lists = new List[4]; for (var i = 0; i < lists.Length; ++i) { lists[i] = new List(sets[i]); lists[i].Sort(); } var l = k / 2; var r = k - k / 2; var pos = lists[r].Count - 1; var ans = 0L; for (var i = 0; i < lists[l].Count; ++i) { while (pos >= 0 && lists[l][i] + lists[r][pos] > m) --pos; if (pos >= 0) ans = Math.Max(ans, lists[l][i] + lists[r][pos]); } WriteLine(ans); } }