#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;
}