#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
#include<string>
using namespace std;
int cmp(const pair<string, int>& x, const pair<string, int>& y)
{
return x.second > y.second;
}
void sortValue(map<string, int>& tMap, vector<pair<string, int> >& tVector)
{
for (map<string, int>::iterator curr = tMap.begin(); curr != tMap.end(); curr++)
tVector.push_back(make_pair(curr->first, curr->second));
sort(tVector.begin(), tVector.end(), cmp);
}
int main() {
while (true) {
int tag_num = 0;
int m_num = 0;
int tmp = 0;
int max = 0;
int min = 0;
string tmp_str;
vector<int> price;
vector<pair<string, int> > tmp_vec;
map<string,int> thing;
cin >> tag_num >> m_num;
for (int i = 0; i < tag_num; i++) {
cin >> tmp;
price.push_back(tmp);
}
for (int i = 0; i < m_num; i++) {
cin >> tmp_str;
++thing[tmp_str];
}
sortValue(thing, tmp_vec);
sort(price.begin(), price.end());
for (int i = 0; i < tmp_vec.size(); i++) {
min = min + price[i] * tmp_vec[i].second;
max = max + price[tag_num - 1 - i] * tmp_vec[i].second;
}
cout << min << ' ' << max << endl;
}
return 0;
}