#include <bits/stdc++.h>
using namespace std;
const int maxn=100005;
const int mod=1000*1000*1000+7;
int n,m,x[maxn],y[maxn],t[maxn];
inline void up(int&x,int y){
  if(x+=y,x>=mod)x-=mod;
}
void add(int x,int y){
  for(x++;x<maxn;x+=x&-x)up(t[x],y);
}
int ask(int x){
  int y=0;
  for(x++;x>0;x-=x&-x)up(y,t[x]);
  return y;
}
int main(){
  //freopen("aa.in","r",stdin);
  scanf("%d%d",&n,&m);
  for(int i=1;i<=n;i++)scanf("%d",x+i);
  for(int i=1;i<=m;i++)scanf("%d",y+i);
  int p=1;
  vector< pair< int,int > >a;
  vector< int >b;
  for(int i=1;i<=n;i++)if(x[i]>=y[1]&&x[i]<=y[m]){
    for(;y[p]<x[i];p++);
    a.push_back(make_pair(x[i]-y[p-1],x[i]-y[p]));
    b.push_back(y[p]-x[i]);
  }
  sort(a.begin(),a.end());
  a.resize(unique(a.begin(),a.end())-a.begin());
  sort(b.begin(),b.end());
  int ans=1;
  for(int i=0;i<a.size();i++){
    int pos=lower_bound(b.begin(),b.end(),-a[i].second)-b.begin();
    int sum=ask(pos-1)+1;
    up(ans,sum);
    add(pos,sum);
  }
  printf("%d\n",ans);
  return 0;
}