WA两个点
#include<bits/stdc++.h>
using namespace std;
long long num,f[1010][1010],g[1010],h[1010],l[1010],r[1010],t,dp[1010],tim[1100][1010],val[1100][1010];
void read(int x){
cin>>g[x]>>h[x];
g[x]*=2;
if(h[x]==0){
l[x]=2*x;
read(2*x);
r[x]=2*x+1;
read(2*x+1);
} else {
for(int i=1;i<=h[x];i++){
cin>>val[i][x]>>tim[i][x];
}
}
}
int dfs(int x,int lef){
if(x==0 || lef<=0) return 0;
int ans=0;
lef-=g[x];
if(f[x][lef]!=0) return f[x][lef];
if(h[x]!=0){
memset(dp,0,sizeof(dp));
for(int j=1;j<=h[x];j++){
for(int i=lef;i>=tim[j][x];i--){
dp[i]=max(dp[i],dp[i-tim[j][x]]+val[j][x]);
}
}
f[x][lef]=dp[lef];
return dp[lef];
}
else{
for(int k=0;k<=lef;k++) ans=max(ans,dfs(l[x],k)+dfs(r[x],lef-k));
}
f[x][lef]=ans;
return ans;
}
int main(){
cin>>t;
read(1);
cout<<dfs(1,t-1);
return 0;
}