#include <bits/stdc++.h>
using namespace std;
int n,m,A[15],B[101];

int mem[101][1<<15],used[101][1<<15];
int dfs(int idx,int sta,int sum){
  if(idx==m) return 0;
  if(used[idx][sta]++)return mem[idx][sta];
  int &res=mem[idx][sta]=abs(sum-B[idx])+dfs(idx+1,sta,sum);
  for(int i=0;i<n;i++)
    if((sta>>i)&1)res=min(res,dfs(idx,~((~sta)|(1<<i)),sum-A[i]));
  return res;
}

int main(){
  while(1){
  cin>>n>>m;
  if(!n&&!m)break;
  int sum=0;
  for(int i=0;i<n;i++) scanf("%d",&A[i]),sum+=A[i];
  for(int i=0;i<m;i++) scanf("%d",&B[i]);
  sort(B,B+m,greater<int>());
  memset(used,0,sizeof(used));
  cout<<dfs(0,(1<<n)-1,sum)<<endl;
  }
  return 0;
}