package core;
import java.util.Scanner;
public class Main {
private static final int MAX = 99999;
private static int dijkastra(boolean[] s, int[] d, boolean[] in_limit,
int[][] graph, int n, int[] value) {
int result = MAX;
int i, j;
int k, dis;
for (int l = 0; l < s.length; l++) {
s[l] = false;
}
for (i = 2, d[1] = 0; i <= n; i++)
d[i] = MAX;
for (i = 1; i <= n; i++) {
k = 0;
dis = MAX;
for (j = 1; j <= n; j++)
if (!s[j] && d[j] <= dis && in_limit[j]) {
k = j;
dis = d[j];
}
s[k] = true;
for (j = 1; j <= n; j++) {
if (in_limit[j] && d[j] > d[k] + graph[k][j])
d[j] = d[k] + graph[k][j];
}
}
for (i = 1; i <= n; i++) {
d[i] += value[i];
if (d[i] < result)
result = d[i];
}
return result;
}
public static void main(String[] args) {
int MAX = 99999;
Scanner input = new Scanner(System.in);
int[][] graph = new int[101][101]; // 图
int[] d = new int[101];
boolean[] s = new boolean[101];
boolean[] in_limit = new boolean[101];
int[] value = new int[101];
int[] level = new int[101];
int i, j;
int result = MAX, // 无穷大
t = 0;
int t1, v1;
int x;
int m = input.nextInt();// M等级差距限制
int n = input.nextInt();// N物品的总数
for (i = 0; i <= n; i++)
for (j = 0; j <= n; j++)
if (i == j)
graph[i][j] = 0;
else
graph[i][j] = MAX;
for (i = 1; i <= n; i++) {
value[i] = input.nextInt();
level[i] = input.nextInt();
x = input.nextInt();
for (j = 1; j <= x; j++) {
t1 = input.nextInt();
v1 = input.nextInt();
graph[i][t1] = v1;
}
}
for (i = 0; i <= m; i++) {
for (int k = 0; k < in_limit.length; k++) {
in_limit[k] = false;
}
for (j = 1; j <= n; j++)
if (level[j] >= level[1] - m + i && level[j] <= level[1] + i)// 这个地方是枚举的关键,必须保证每个范围内的等级限制均枚举出来
in_limit[j] = true;
t = dijkastra(s, d, in_limit, graph, n, value);
if (result > t)
result = t;
}
System.out.println(result);
}
}