rt
#include <vector>
#include <cstring>
#include <iostream>
#include <limits.h>
#include <algorithm>
#include <unordered_map>
#define ll long long
using namespace std;
int A, B, n;
bool s[1010], e[1010];// reach ?
// ver & map
int p[1010], m[1010];
vector<int> ro[1010];
vector<int> map[100010];
int v[100010][1010];
long long ans1 = LONG_LONG_MAX, ans2 = LONG_LONG_MAX;
bool flag2;
void dfs(int r, ll pr, ll num, int city) {
if (pr > ans1 || (pr == ans1 && ans2 < num)) {
return;
}
if (city == B) {
flag2 = 1;
if (pr < ans1 || (pr == ans1 && ans2 > num)) {
ans1 = pr;
ans2 = num;
}
return;
}
for (int i = 0; i < map[city].size(); i ++) {
int it = map[city][i];
if (ro[it][m[it] - 1] == city) continue;
if (it == r) {
dfs(it, pr, num + 1, ro[it][v[city][it] + 1]);
} else {
dfs(it, pr + p[it], num + 1, ro[it][v[city][it] + 1]);
}
}
}
int main() {
// freopen("route.in", "r", stdin);
// freopen("route.out", "w", stdout);
cin >> A >> B >> n;
for (int i = 1; i <= n; i ++) {
cin >> p[i] >> m[i];
int x;
for (int j = 0; j < m[i]; j ++) {
scanf("%d", &x);
ro[i].push_back(x);
map[x].push_back(i);
v[x][i] = j;
}
}
for (int i = 0; i < map[A].size(); i ++) {
int it = map[A][i];
if (ro[it][m[it] - 1] == A) continue;
dfs(it, p[it], 1, ro[it][v[A][it] + 1]);
}
if (flag2)
cout << ans1 << ' ' << ans2;
else
cout << "-1 -1";
return 0;
}