#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
// 내림차순
int compare(const void* a, const void* b) {
return (*(int*)b - *(int*)a);
}
// 가격 입력하고 가격 배열 리턴
int* input_price(int size){
int *price_arr = (int *)malloc(sizeof(int)*size);
for(int i = 0; i < size; i++){
scanf("%d", &price_arr[i]);
}
return price_arr;
}
// min 구하기 feat.가변 인자 함수
int min_f (int num, ...){
va_list args;
va_start(args, num);
int min = va_arg(args, int);
for(int i = 1; i < num; i++){
int value = va_arg(args, int);
if(min > value){
min = value;
}
}
va_end(args);
return min;
}
// 합 구하는 함수
int sum(int start, int end, int *arr){
int sum = 0;
for(int i = start; i < end; i++){
sum += arr[i];
}
return sum;
}
int main(void){
// 버거의 개수 B, 사이드 메뉴의 개수 C, 음료의 개수 D 입력
int burger_num = 0, side_num = 0, drink_num = 0;
scanf("%d %d %d", &burger_num, &side_num, &drink_num);
// 가격 배열에 저장
int *burger_price = input_price(burger_num);
int *side_price = input_price(side_num);
int *drink_price = input_price(drink_num);
// 내림차순 퀵 정렬
qsort(burger_price, burger_num, sizeof(int), compare);
qsort(side_price, side_num, sizeof(int), compare);
qsort(drink_price, drink_num, sizeof(int), compare);
int discount_sum = 0; // 할인 할 금액 합
int non_discount_sum = 0; // 할인 안 할 금액 합
int min = min_f(3, burger_num, side_num, drink_num);
// 세트 가격 합 계산하기 (할인 할 금액 합)
for(int i = 0; i < min; i++){
discount_sum += burger_price[i] + side_price[i] + drink_price[i];
}
// 세트 아닌 메뉴 가격 합 합하기
non_discount_sum = sum(min, burger_num, burger_price) +
sum(min, side_num, side_price) +
sum(min, drink_num, drink_price);
// 세트 할인 적용되기 전 가격 출력
printf("%d\n", discount_sum+non_discount_sum);
// 세트 할인이 적용된 후의 최소 가격
printf("%d\n", (discount_sum*9/10)+non_discount_sum);
free(burger_price);
free(side_price);
free(drink_price);
return 0;
}