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的写了个最简单的冒泡排序用。。。