public static void main(String[] args) {
int n,m;
Scanner reader = new Scanner(System.in);
while(reader.hasNextLine()){
n = reader.nextInt();
m = reader.nextInt();
if(n>=1 && m<=1000){
int[] arr = new int[n];
int i = 0;
while(i < n){
int temp = reader.nextInt();
if(temp <= 100000){
arr[i] = temp;
i++;
}
}
sortArr(arr);
reader.nextLine();
String[] things = new String[m];
int j = 0;
while(j < m){
String temp = reader.nextLine();
if(!temp.equals("") && temp.length()<=32){
things[j] = temp;
j++;
}
}
int minR = 0,maxR = 0;
Map<String,Integer> hashMap = new HashMap<String,Integer>();
for (String string : things) {
if(hashMap.containsKey(string)){
int tmp = hashMap.get(string);
tmp++;
hashMap.put(string, tmp);
}else{
hashMap.put(string, 1);
}
}
int count = hashMap.size();//多少种类
Collection<Integer> list = hashMap.values();
int[] arrCount = new int[count];
int y = 0;
for (Integer it : list) {
arrCount[y++] = it;
}
sortArr(arrCount);
int x = arr.length - 1;
for(int l = arrCount.length - 1;l>=0;l--){
maxR += arrCount[l] * arr[x--];
}
x = 0;
for(int l = arrCount.length - 1;l>=0;l--){
minR += arrCount[l] * arr[x++];
}
System.out.println(minR + " " +maxR);
}
}
}
public static void sortArr(int[] arr){
for(int i = 0;i < arr.length;i++){
for(int j = 0;j < arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
笔试的写的有点乱。。。变量也是乱命名的。。。还有,才接触java的我居然没找到java自带的排序方法。。。还自己sb的写了个最简单的冒泡排序用。。。