/*又一次做了一个所谓的01背包的题,给你一个固定的最大报销值,你能报销的值不能超过这个最大固定值。现在给你,很多报销单,问能报销的最大值(解释题意不给力)!很明显的01背包思想。上次我还在问,如果碰到浮点数怎么处理,今天就果断碰到一个浮点的01背包。果断只能加大数据,*100然后作为01整数背包处理!菜鸟解决一个水题,也感觉乐在其中。*/
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cstdlib>
#include <cstring>
using namespace std;
int dp[3100005],a[35];
double deal(char s[])
{
double q=0;
char sh[20];
int l=strlen(s),k=0;
for(int i=2;i<l;i++) sh[k++]=s[i];
q=atof(sh);
return q;
}
int main ()
{
//freopen("z.txt","r",stdin);
char str[20];
int n,m,i,j,k;
double s,t;
while(cin>>s>>n)
{
k=0;
if(n==0) break;
for(i=0;i<n;i++)
{
int f=0,flag=0;
double temp[3],tenp=0.0;
memset(temp,0,sizeof(temp));
for(cin>>m,j=0;j<m;j++)
{
cin>>str;
t=deal(str);
if('C'<str[0]) flag=1;
temp[str[0]-'A']+=t;
}
if(flag==0)
{
for(j=0;j<3;j++)
{
tenp+=temp[j];
if(temp[j]>600) f=1;
}
if(f!=1 && tenp<=1000.0) a[k++]=int(tenp*100.0);
}
}
memset(dp,0,sizeof(dp));
int weight=int(s*100);
for(i=0;i<k;i++)
{
for(j=weight;j>=a[i];j--)
if(dp[j-a[i]]+a[i]>dp[j])
dp[j]=dp[j-a[i]]+a[i];
}
for(j=weight;j>=0;j--)
if(dp[j]>0) break;
double res=dp[j]*1.0/100.0;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<res<<endl;
}
return 0;
}