/*
TASK:books
LANG:C++
*/
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define maxN 200
#define maxK 100

long long N,K,S[maxN],D[maxN],F[2][maxK][maxN],oldR,newR;
long long maxlong=1;

void init();
void solve();
long long findmin(long long to);

int main()
{
 for (int br=1;br<=17;br++) maxlong*=10;
 init();
 solve();
 return 0;
}

void init()
{
// ifstream fin("books.in");
 cin>>N>>K;
 long long i,j;
 for (i=1;i<=N;i++) cin>>S[i];
 for (i=1;i<=N;i++) cin>>D[i];
// fin.close();
 for (i=0;i<=K;i++)
    for (j=0;j<=N;j++)
       { F[0][i][j]=maxlong;F[1][i][j]=maxlong; }
 F[0][0][0]=0;
 oldR=1;
}

void solve()
{
 long long i,j,k;
 for (i=1;i<=N;i++,F[0][0][0]=maxlong)
    for (swap(newR,oldR),j=1;j<=i&&j<=K;j++)
       for (k=1;k<=i-j+1;k++)
          if (k==1)
             F[newR][j][k]=findmin(j-1)+S[i]*D[1];
             else
             F[newR][j][k]=F[oldR][j][k-1]+S[i]*D[k];
 long long Res=maxlong;
 for (j=1;j<=K;j++)
    for (i=1;i<=N;i++)
       if (F[newR][j][i]<Res)
          Res=F[newR][j][i];
// ofstream fout("books.out");
 cout<<Res<<endl;
// fout.close();
}

long long findmin(long long to)
{
 long long rez=maxlong;
 for (long long i=0;i<=N;i++)
    if (F[oldR][to][i]<rez)
      rez=F[oldR][to][i];
 return rez;
}
