#include <bits/stdc++.h>
#include <string>
#include <vector>
using namespace std;
/*可以考虑将所有金额乘以100倍*/
int limit;//报销额度
double temp_limit;
int receipt_num;//发票数目
int num;
struct receipt {
//ABC类花费
int cost_A;
int cost_B;
int cost_C;
int cost;
};
vector<receipt> v;
string s;
receipt one;//一张发票
int main() {
while (cin >> temp_limit) {
limit=(temp_limit*100);//报销额度乘以100
v.clear();
cin >> receipt_num; //发票张数
if (receipt_num == 0) continue; //需要报销的发票数目为0
while (receipt_num--) {
one.cost_A = one.cost_B = one.cost_C = 0;
cin >> num; //这张发票上所开物品的件数
bool isinvalid=0;//默认合法
while (num--) {
cin >> s;
if (s[0] == 'A') one.cost_A += stod(s.substr(2))*100; //将字符串转化为double
else if (s[0] == 'B') one.cost_B += stod(s.substr(2))*100;
else if (s[0] == 'C') one.cost_C += stod(s.substr(2))*100;
else
{
isinvalid=1;
}
}
//如果不是ABC类,应该作废
if(isinvalid==1) continue;
//要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元
if (max(one.cost_A, max(one.cost_B, one.cost_C)) > 60000 ||
one.cost_A + one.cost_B + one.cost_C > 100000) continue;
else {
one.cost = one.cost_A + one.cost_B + one.cost_C;
v.push_back(one);//将这个发票保存
}
}
//以上是处理输入
vector<int> dp(limit+1,0);//dp[i]代表i元钱最多能报销的发票总额是多少
for(int i=0;i<v.size();i++)
{
for(int j=limit;j>=1;j--)
{
if(j-v[i].cost>=0)
dp[j]=max(dp[j],dp[j-v[i].cost]+v[i].cost);
}
}
//处理输出
cout<<fixed<<setprecision(2)<<double(dp[limit])/100<<endl;
}
}
// 64 位输出请用 printf("%lld")