#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 3e5+5;
int a[N];
int n, k;
unordered_map<int, int> pos;
vector<int> build(int dif){
vector<int> pre(n+k+5);
vector<array<int, 2>> from1(n+k+5);
for(int i=1; i<=n+k; i++){
pre[i] = pre[i-1];
from1[i] = {i-1, 0};
if(pos[a[i]-dif]) {
if(pre[i] < pre[pos[a[i]-dif]] + 1){
pre[i] = pre[pos[a[i]-dif]] + 1;
from1[i] = {pos[a[i]-dif], i};
}
} else if(pre[i] == 0){
pre[i] = 1;
from1[i] = {0, i};
}
}
vector<int> suf(n+k+5);
vector<array<int, 2>> from2(n+k+5);
for(int i=n+k; i>=1; i--){
suf[i] = suf[i+1];
from2[i] = {i+1, 0};
if(pos[a[i]+dif]) {
if(suf[i] < suf[pos[a[i]+dif]] + 1){
suf[i] = suf[pos[a[i]+dif]] + 1;
from2[i] = {pos[a[i]+dif], i};
}
} else if(suf[i] == 0){
suf[i] = 1;
from2[i] = {n+k+1, i};
}
}
int idx = -1;
for(int i=1; i<=n+k; i++){
// cout << suf[i+1] << endl;
if(min(pre[i], suf[i+1])*2 < n) continue;
// cout << pre[i] << endl;
idx = i;
}
if(idx == -1) return {};
vector<int> ans;
int i = idx;
while(i >= 1){
if(from1[i][1] == 0){
i--;
continue;
}
ans.push_back(a[from1[i][1]]);
i = from1[i][0];
}
reverse(ans.begin(), ans.end());
while(ans.size() > n/2) ans.pop_back();
i = idx+1;
while(i <= n+k){
// cout << i << endl;
if(from2[i][1] == 0){
i++;
continue;
}
ans.push_back(a[from2[i][1]]);
i = from2[i][0];
}
// for(int i: ans) cout << i << " ";
// cout << endl;
while(ans.size() > n) ans.pop_back();
return ans;
}
// for(int i=1; i<=n; i++)
void solve(){
cin >> n >> k;
for(int i=1; i<=n+k; i++) cin >> a[i];
for(int i=1; i<=n+k; i++) pos[a[i]] = i;
for(int l=1; l<=2+k; l++){
for(int r=l+1; r<=2+k; r++){
int dif = a[r] - a[l];
vector<int> ans = build(dif);
// cout << dif << endl;
// if(dif == 1) {
// for(int i: ans) cout << i << " ";
// cout << endl;
// }
if(ans.size() == n) {
for(int i: ans) cout << i << " ";
return;
}
}
}
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
}