#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct edge{ int from,to,cost; }; struct vertex{ int value,rank; }; const int Max=110; const int INF=0x7fffffff; edge es[Max*Max]; vertex v[Max]; int dist[Max],en=1; int ans=0x7fffffff; void bellman(int n, int m){ int i; dist[0]=0; while(true){ bool update=false; for(i=1;i<en;i++){ edge e=es[i]; if(v[e.to].rank<n||v[e.to].rank>m) continue; if(dist[e.from]!=INF&&dist[e.to]>dist[e.from]+e.cost){ dist[e.to]=dist[e.from]+e.cost; update=true; } } if(!update)break; } } int main() { int r,n,j,k,i,vn,dis; cin>>r>>n; for(j=0;j<=n;j++){dist[j]=INF;} for(i=1;i<=n;i++){ cin>>v[i].value>>v[i].rank>>j; es[en].cost=v[i].value; es[en].from=0; es[en++].to=i; for(k=1;k<=j;k++){ cin>>vn>>dis; es[en].from=vn; es[en].to=i; es[en++].cost=dis; } } v[0].rank=v[1].rank; for(i=v[1].rank-r;i<=v[1].rank;i++){ bellman(i,i+r); if(ans>dist[1]){ ans=dist[1]; } } cout<<ans<<endl; }