#include<iostream>
#include<queue>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
struct S{
	int x,y,r;
};
int main(){
	int m,n,t,u,ans,INF=1<<30;
	while(cin>>n>>m,n){
		int d[n][10],cost[n][10][m+1],x[n][10];
		rep(i,n){
			rep(j,10){
				d[i][j]=x[i][j]=0;
				rep(k,m+1)cost[i][j][k]=INF;
			}
			cin>>t; rep(j,t)cin>>x[i][j],cin>>d[i][j];
		}
		queue<S> F; S s; ans=INF;
		rep(i,10)rep(j,(m?2:1))if(d[j][i]){
			s.x=i,s.y=j,s.r=m-j;
			F.push(s),cost[j][i][m-j]=0;
		}
		while(!F.empty()){
			S cs=F.front(); F.pop();
			rep(j,(cs.r?2:1)){
				if(cs.y+j+1<n)rep(i,10)if(d[cs.y+j+1][i]){
					s=cs; s.y=cs.y+j+1,s.x=i,s.r-=j;
					u=x[s.y][i]-x[cs.y][cs.x];
					t=cost[cs.y][cs.x][cs.r]+(d[cs.y][cs.x]+d[s.y][i])*(u>0?u:-u);
					if(cost[s.y][i][s.r]>t)cost[s.y][i][s.r]=t,F.push(s);
				}
				if(cs.y+j+1>=n&&ans>cost[cs.y][cs.x][cs.r])ans=cost[cs.y][cs.x][cs.r];
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}