/*
TASK:books
LANG:C++
*/

#include <iostream>
//#include <fstream>

using namespace std;

int n, k;
unsigned long long int s[ 256 ];
unsigned long long int d[ 256 ];
unsigned long long F[ 2 ][ 128 ][ 256 ];

void init( )
{
 	int i;
	cin >> n >> k;

	for ( i=1; i<=n; i++ )
		cin >> s[ i ];

	for ( i=1; i<=n; i++ )
		cin >> d[ i ];
}

unsigned long long min( unsigned long long x, unsigned long long y )
{
 	return x < y ? x : y;
}

void solve( )
{
	int i, j, t;
	unsigned long long w;
	unsigned ROW = 0;
	unsigned long long  INF = ~0;
	INF >>= 1;

		for ( j=0; j<=k; j++ )
			for ( t=0; t<=n; t++ )
			{
				F[ ROW ][ j ][ t ] = INF;
				F[ !ROW ][ j ][ t ] = INF;
			}


	for ( i=1; i<=k; i++ )
		for ( j=1; j<=n; j++ )
			F[ ROW ][ i ][ j ] = s[ 1 ] * d[ 1 ];

	for ( i=2; i<=n; i++ )
	{
		F[ !ROW ][ 1 ][ i ] = s[ i ]*d[ i ] + F[ ROW ][ 1 ][ i-1 ];

		for ( t=i+1; t<=n; t++ )
			F[ !ROW ][ 1 ][ t ] = INF;


		for ( t=1; t<i; t++ )
			F[ !ROW ][ 1 ][ t ] = INF;

		for ( j=2; j<=k; j++ )
		{
			w = INF;
			for ( t=1; t<i; t++ )
				if ( F[ ROW ][ j-1 ][ t ] < w )
				  w = F[ ROW ][ j-1 ][ t ];

			  F[ !ROW ][ j ][ 1 ] = w + s[ i ] * d[ 1 ];

				for ( t=2; t<=i; t++ )
					F[ !ROW ][ j ][ t ] = F[ ROW ][ j ][ t-1 ] + s[ i ] * d[ t ];

				for ( t=i+1; t<=n; t++ )
					F[ !ROW ][ j ][ t ] = INF;
		}
   	ROW = !ROW;
	}

	unsigned long long ans = INF<<1;

	for ( j=1; j<=k; j++ )
		for( t=1; t<=n; t++ )
			if ( F[ ROW ][ j ][ t ] < ans )
			  ans = F[ ROW ][ j ][ t ];

	cout << ans << endl;
}


int main( )
{
	init( );
	solve( );

	return 0;
}
