#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define fi first
#define se second
int n,m,a[100007],b[100007];
vector < pair <int,int> > pos;
map <int,long long> bit;
const long long mod=1e9+7,lim=1e9+1;
bool cmp(pair<int,int> x, pair<int,int> y){
	return ((x.fi<y.fi) || (x.fi==y.fi && x.se>y.se));
}
void update(int pos,long long val){
	for(int i=pos;i<=lim;i+=i&(-i)){
		bit[i]=(bit[i]+val)%mod;
	}
}
long long get(int pos){
	long long ret=0;
	for(int i=pos;i>=1;i-=i&(-i)){
		ret=(ret+bit[i])%mod;
	}
	return ret;
}
int main(){
	ios_base::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<=m;i++) cin>>b[i];
	int cnt=0;
	for(int i=1;i<=n;i++){
		while(cnt<m && b[cnt+1]<=a[i]){
			cnt++;
		}
		if(cnt>=1 && cnt<m && a[i]!=b[cnt] && a[i]!=b[cnt+1]){
			pos.pb(mp(a[i]-b[cnt],b[cnt+1]-a[i]));
		}
	}
	sort(pos.begin(),pos.end(),cmp);
	update(1,1);
	for(int i=0;i<(int)pos.size();i++){
		if(i==0 || pos[i]!=pos[i-1]){
			update(pos[i].se+1,get(pos[i].se));
		}
	}
	cout<<get(lim);
}
