#include<iostream>//n个数中取K个数,要求k个数的和=x,如果有多种方案,取方案中,每个数平方后的和的最大的那个方案
#include<vector>
using namespace std;
#define maxn 30
int n, k, x, maxsump = -1, a[maxn];
vector<int>temp, ans;
void DFS(int idex, int nowk, int sum, int sump)
{
if (idex == x || nowk > k || sum > x)return;
if (nowk == k && sum == x)
{
if (sump > maxsump)
{
maxsump = sump;
ans = temp;
}
return;
}
temp.push_back(a[idex]);
DFS(idex + 1, nowk + 1, sum + a[idex], sump + a[idex] * a[idex]);//这里如果说明每个数可以多次选择,则可以改成DFS(idex , nowk + 1, sum + a[idex], sump + a[idex] * a[idex])
temp.pop_back();
DFS(idex + 1, nowk, sum , sump );
}
int main()
{
cin >> n>>x>>k;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
DFS(0, 0, 0, 0);
for (int i = 0; i < ans.size(); i++)
cout << ans[i] << " ";
cout << endl;
return 0;
}