/*
TASK:BOOKS
LANG:C++
*/
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#define maxn 202
#define maxk 102
//#define min(a,b) ((a)<(b)? (a):(b))

typedef long long t1;

int n,k,c[maxk][maxn];
t1 d[maxn],a[maxn][maxn],b[maxk][maxn];

void inp(void)
{ int i;
  long j;
  scanf("%d%d",&n,&k);
  for (i=1;i<=n;i++) { scanf("%ld",&j);
		       a[1][i]=(t1)j;
		     }
  for (i=1;i<=n;i++) { scanf("%ld",&j);
		       d[i]=(t1)j;
		     }
}
t1 find(void)
{ int i,j;
  t1 x,y;
  for (i=2;i<=n;i++)
    for (j=i;j<=n;j++) a[i][j]=d[i]*a[1][j];
  c[1][1]=1;
  for (i=1;i<=n;i++) { b[1][i]=b[1][i-1]+a[i][i];
		       c[1][i]=c[1][i-1]+1;
		     }
  for (i=2;i<=k;i++)
    {b[i][i]=b[i-1][i-1]+a[1][i];
     c[i][i]=1;
     for (j=i+1;j<=n;j++) { x=b[i-1][j-1]+a[1][j];
			 y=b[i][j-1]+a[c[i][j-1]+1][j];
			 if (y<x) { b[i][j]=y;
				    c[i][j]=c[i][j-1]+1;
				  }
			     else { b[i][j]=x;
				    c[i][j]=1;
				  }
		       }
     }
  x=b[1][n];
  for (i=2;i<=k;i++) if (x>b[i][n]) x=b[i][n];
  return x;
}
int main(void)
{ memset(a,0,sizeof(a));
  memset(b,0,sizeof(b));
  memset(c,0,sizeof(c));
  inp();
//  printf("%i64\n",find());  //%i64
  cout<<find()<<"\n";
  return 0;
}

