#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
typedef pair<int, int> P;
int n, m;
int dp[80][200][20], kosu[1600];
P stone[1600][20];
int main()
{
	while(cin >> n >> m && n)
	{
		for(int i = 0; i < n; i++)
		{
			scanf("%d", kosu + i);
			for(int j = 0; j < kosu[i]; j++)
			{
				scanf("%d%d", &stone[i][j].F, &stone[i][j].S);
			}
		}
		for(int i = 0; i <= m; i++)
			for(int j = 0; j < n; j++)
				for(int k = 0; k < kosu[j]; k++)
					dp[i][j][k] = 1 << 30;
				for(int i = 0; i < kosu[0]; i++)
					dp[0][0][i] <<= 2;
				for(int i = 0; i < kosu[1]; i++)
					dp[1][1][i] <<= 2;
				for(int i = 0; i < n - 1; i++)
				{
					for(int j = 0; j < kosu[i]; j++)
					{
						for(int k = 0; k < kosu[i + 1]; k++)
						{
							for(int l = 0; l <= m; l++)
							{
								if(dp[l][i][j] < 1 << 30)
									dp[l][i + 1][k] = min((stone[i + 1][k].S + stone[i][j].S) * abs(stone[i + 1][k].F - stone[i][j].F) + dp[l][i][j], dp[l][i + 1][k]);
							}
						}
						if(i + 2 < n)
						{
							for(int k = 0; k < kosu[i + 2]; k++)
							{
								for(int l = 0; l < m; l++)
								{

									if(dp[l][i][j] < 1 << 30)
									{
										dp[l + 1][i + 2][k] = min((stone[i + 2][k].S + stone[i][j].S) * abs(stone[i + 2][k].F - stone[i][j].F) + dp[l][i][j], dp[l + 1][i + 2][k]);
									}
								}
							}
						}
					}
				}
				int ans = INT_MAX;
				for(int i = 0; i <= m; i++)
					for(int j = 0; j < kosu[n - 1]; j++)
						ans = min(ans, dp[i][n - 1][j]);
					for(int i = 0; i < m; i++)
						for(int j = 0; j < kosu[n - 2]; j++)
							ans = min(ans, dp[i][n - 2][j]);
						cout << ans << endl;
					}
				}