#include <bits/stdc++.h>
using namespace std;
#include "aplusb.h"
struct A{
int i,j,x;
bool operator<(const A&o)const{
return x>o.x;
}
};
priority_queue<A>pq;
set<pair<int,int>>os;
std::vector<int> smallest_sums(int N, std::vector<int> A, std::vector<int> B) {
vector<int>ret;
pq.push({0,0,A[0]+B[0]});
os.insert({0,0});
int n = A.size();
int m = B.size();
while(ret.size() < N){
int i = pq.top().i,j = pq.top().j , v = pq.top().x;
pq.pop();
os.insert({i,j});
ret.push_back(v);
if(i+1<n && os.find({i+1,j}) == os.end())pq.push({i+1,j,A[i+1]+B[j]});
if(j+1<m && os.find({i,j+1}) == os.end())pq.push({1,j+1,A[i]+B[j+1]});
}
return ret;
}