#include <stdio.h>
#include <stdlib.h>

int main() {
   int n ,m;
   scanf("%d %d",&n,&m);
  //为a1分配动态内存
   int* a1=(int*)malloc(n * sizeof(int));
   if(a1 == NULL){
    printf("内存分配失败!\n");
    exit(1);
   }
   for(int i = 0;i < n;++i){
    scanf("%d",a1+i);//等价于&a1[i]
   }
 //为a2分配动态内存
   int* a2=(int*)malloc(m * sizeof(int));
   if(a2 == NULL){
    printf("内存分配失败!\n");
	 free(a1);//释放已分配的a1,避免内存泄漏
    exit(1);
   }
   for(int i = 0;i < m;++i){
    scanf("%d",a2+i);//等价于&a2[i]
   }
   //为a3分配动态内存
   int* a3=(int*)malloc((n+m) * sizeof(int));
   if(a1 == NULL){
    printf("内存分配失败!\n");
	 free(a2);//释放已分配的a2,避免内存泄漏
    exit(1);
   }
   for(int i = 0;i < n;++i){
    a3[i] = a1[i];
    
   }for(int i = 0;i < m;++i){
    a3[n+i] = a2[i];
    
   }
  //冒泡排序
   for(int i = 0;i < n+m-1;++i){
    for(int j = 0;j < n+m-1-i;++j){
        if(a3[j] > a3[j+1]){
            int temp = a3[j];
            a3[j] = a3[j+1];
            a3[j+1] = temp;
        }
    }
   }
   for(int i = 0;i < n+m;++i){
    printf("%d ",a3[i]);
   }
  //释放动态内存
   free(a1);
   free(a2);
   free(a3);
   a1=NULL;
   a2=NULL;
   a3=NULL;
    return 0;
}