#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <sstream>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <iterator>
#include <stack>
#include <list>
using namespace std;
#define INF 1000000000
typedef long long int lli;
typedef pair<int,int> P;

int dp[152][1001][76];
int s[152][1001];
int abs(int x){
	if(x<0) return -1*x;
	else return x;
}

int main(){
	int n,m;
	while(cin>>n>>m){
		if(n==0&&m==0) break;
		for(int i=1; i<=n; ++i){
			for(int j=1; j<1001; ++j){
				s[i][j]=INF;
				for(int k=0; k<=m; ++k){
					dp[i][j][k]=INF;
				}
			}
		} 
		for(int i=1; i<=n; ++i){
			int k;
			cin >> k;
			for(int j=0; j<k; ++j){
				int t1,t2;
				cin >> t1 >> t2;
				s[i][t1]=t2;
			}
		}
		for(int i=1; i<1001; ++i){
			if(s[1][i]!=INF) dp[1][i][0]=0;
		}
		for(int i=1; i<1001; ++i){
			if(s[2][i]!=INF){
				for(int j=1; j<1001; ++j){
					if(s[1][j]!=INF){
						dp[2][i][0]=min(dp[2][i][0],(s[2][i]+s[1][j])*abs(i-j));
					}
				}
				dp[2][i][1]=0;
			}
		}
		for(int i=3; i<=n; ++i){
			for(int j=1; j<1001; ++j){
				if(s[i][j]!=INF){
					for(int k=0; k<=m; ++k){
						for(int l=1; l<1001; ++l){
							if(s[i-1][l]!=INF&&dp[i-1][l][k]!=INF){
								dp[i][j][k]=min(dp[i][j][k],(s[i-1][l]+s[i][j])*abs(j-l)+dp[i-1][l][k]);
							}
							if(s[i-2][l]!=INF&&k!=0&&dp[i-2][l][k-1]!=INF){
								dp[i][j][k]=min(dp[i][j][k],(s[i-2][l]+s[i][j])*abs(j-l)+dp[i-2][l][k-1]);
							}
						}
					}
				}
			}
		}
		int ans=INF;
		for(int i=1; i<1001; ++i){
			for(int j=0; j<=m; ++j){
				ans=min(ans,dp[n][i][m]);
				if(j<m) ans=min(ans,dp[n-1][i][j]);
			}
		}
		cout << ans << "\n";
	}
	return 0;
}