1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<cstdlib>
5 #include<cmath>
6 #include<algorithm>
7 using namespace std;
8 int read() {
9 int x=0,f=1;char ch=getchar();
10 while(!isdigit(ch)){if(ch==‘-‘) f=-1;ch=getchar();}
11 while(isdigit(ch)){x=x*10+ch-‘0‘;ch=getchar();}
12 return x*f;
13 }
14 int n,m,cnt,tot,ans;
15 int p[55],L[55],M[55];
16 int f[55][105][2005];
17 int g[55][2005],h[55][2005];
18 char ch[5];
19 int head[55],deg[55];
20 struct data{int to,next,v;}e[20005];
21 void add(int u,int v,int w){e[cnt].to=v;e[cnt].next=head[u];head[u]=cnt;e[cnt].v=w;cnt++;deg[v]++;}
22 void dfs(int now) {
23 if(head[now]<0) {
24 L[now]=min(L[now],m/M[now]);
25 for(int i=0;i<=L[now];i++)
26 for(int j=i;j<=L[now];j++) f[now][i][j*M[now]]=(j-i)*p[now];
27 return ;
28 }
29 L[now]=214748364;
30 for(int i=head[now];i>=0;i=e[i].next) {
31 int to=e[i].to;
32 dfs(to);
33 L[now]=min(L[now],L[to]/e[i].v);
34 M[now]+=e[i].v*M[to];
35 }
36 L[now]=min(L[now],m/M[now]);
37 memset(g,-47,sizeof(g));
38 g[0][0]=0;
39 for(int b=L[now];b>=0;b--) {
40 int tot=0;
41 for(int i=head[now];i>=0;i=e[i].next) {
42 tot++;
43 for(int j=0;j<=m;j++)
44 for(int k=0;k<=j;k++){
45 g[tot][j]=max(g[tot][j],g[tot-1][j-k]+f[e[i].to][b*e[i].v][k]);}
46 }
47 for(int i=0;i<=b;i++)
48 for(int j=0;j<=m;j++)
49 f[now][i][j]=max(f[now][i][j],g[tot][j]+p[now]*(b-i));
50 }
51 }
52 int main() {
53 memset(head,-1,sizeof(head));
54 memset(f,-47,sizeof(f));
55 n=read(),m=read();
56 for(int i=1;i<=n;i++) {
57 p[i]=read();
58 scanf("%s",ch);
59 if(ch[0]==‘A‘) {
60 int x=read();
61 while(x--) {
62 int v=read(),num=read();
63 add(i,v,num);
64 }
65 }
66 else M[i]=read(),L[i]=read();
67 }
68 int sum=0;
69 for(int x=1;x<=n;x++) {
70 if(!deg[x]) {
71 dfs(x);
72 sum++;
73 for(int i=0;i<=m;i++)
74 for(int j=0;j<=i;j++)
75 for(int k=0;k<=L[x];k++)
76 h[sum][i]=max(h[sum][i],h[sum-1][j]+f[x][k][i-j]);
77 }
78 }
79 int ans=0;
80 for(int i=0;i<=m;i++) ans=max(ans,h[sum][i]);
81 cout<<ans;
82 }