( ̄▽ ̄)"
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int INF=10e8;
const int MAXN=110;
int k,minn;
int c[MAXN][MAXN],lc[MAXN],level[MAXN],X[MAXN];
bool vis[MAXN];
int dij(int n)
{
for(int i=1;i<=n;i++)
lc[i]=c[0][i];
for(int j=1;j<=n;j++)
{
k=-1,minn=INF;
for(int i=1;i<=n;i++)
{
if(!vis[i]&&lc[i]<minn)
{
minn=lc[i];
k=i;
}
}
if(k==-1) break;
vis[k]=1;
for(int i=1;i<=n;i++)
if(!vis[i]&&c[k][i]>0&&lc[i]>lc[k]+c[k][i]) //c[k][i]>0¶ø²»ÊÇc[k][i]>=0
lc[i]=lc[k]+c[k][i];
}
return lc[1];
}
int main()
{
int m,n;
scanf("%d%d",&m,&n);
memset(c,0,sizeof(c));
memset(level,0,sizeof(level));
memset(lc,INF,sizeof(lc));
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&c[0][i],&level[i],&X[i]);
int t,v;
for(int j=1;j<=X[i];j++)
{
scanf("%d%d",&t,&v);
c[t][i]=v;
}
}
int maxLevel,minPrice=INF;
for(int i=1;i<=n;i++)
{
maxLevel=level[i];
for(int j=1;j<=n;j++)
{
if(level[j]>maxLevel||maxLevel-level[j]>m)
vis[j]=1;
else vis[j]=0;
}
int price=dij(n);
minPrice=min(minPrice,price);
}
printf("%d
",minPrice);
return 0;
}