using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.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 = new int[n + 1]; for (var i = 0; i <= n; ++i) a[i] = NN; var min = new int[n + 1, n + 1]; for (var i = 0; i <= n; ++i) min[i, i] = a[i]; for (var i = n - 1; i >= 0; --i) for (var j = i + 1; j <= n; ++j) min[i, j] = Math.Min(min[i, j - 1], min[i + 1, j]); var INF = long.MinValue / 2; var dp = new long[n + 1, m + 1]; for (var i = 0; i <= n; ++i) for (var j = 0; j <= m; ++j) dp[i, j] = INF; dp[0, 0] = k; for (var i = 1; i <= n; ++i) { for (var j = 0; j <= m; ++j) dp[i, j] = dp[i - 1, j]; for (var j = 1; j <= m; ++j) { if (j == 1) dp[i, j] = Math.Max(dp[i, j], dp[0, 0] / min[0, i - 1] * a[i] + dp[0, 0] % min[0, i - 1]); else for (var p = 0; p < i - 1; ++p) dp[i, j] = Math.Max(dp[i, j], dp[p, j - 1] / min[p + 1, i - 1] * a[i] + dp[p, j - 1] % min[p + 1, i - 1]); } } var ans = 0L; for (var i = 0; i <= m; ++i) ans = Math.Max(ans, dp[n, i]); WriteLine(ans); } }