/*
TASK:books
LANG:C++
*/
#include <cstdio>
#include <cstdlib>
//#include <stack>
#include <ctime>
#include <cstring>
using namespace std;

#define MAXN 201
#define MAXK 101
#define min(a,b) ((a)<(b)?(a):(b))

int s[MAXN],d[MAXN];
long long F[MAXN][MAXK][MAXN];
int N, K;

void Init(void) {
     int i;
     scanf("%d%d",&N,&K);
     for(i=1; i<=N; i++) scanf("%d",s+i);
     for(i=1; i<=N; i++) scanf("%d",d+i);
}
 
void Solve(void) {
     int i,j,w;
//     F[N][K][N-1] = d[N]*s[N];
//     memset(F,0,sizeof(F));
     for(i=N; i>=1; i--)
              for(j=i-1; j>=0; j--) 
              {
               F[i][K][j] = F[i+1][K][j+1]+s[i]*d[j+1];
             //  printf("F[%d][%d][%d]=%lld\n",i,K,j,F[i][K][j]);
              }
              
     for(i=N; i>=1; i--)
              for(j=K-1; j>=1; j--)
                         for(w=i-1; w>=0; w--)                         
                          F[i][j][w] = min(F[i+1][j][w+1]+s[i]*d[w+1],F[i][j+1][0] );
                          
}
         
int main(void) {
    int i,j;
    clock();
    Init();
//    printf("here\n");
    Solve();
    printf("%lld\n",F[1][1][0]);
  //  printf("%.3lf\n",(double)clock()/(double)CLOCKS_PER_SEC);
    
    return 0;
}
