#include <algorithm>
#include <cstdio>
#include <set>

const int P=1000000007;
inline int add(int a,const int &b){a+=b;return (a>=P)?a-P:a;}
int n,m,x[100001],top,orig[200001],lim,ans=1,c[200001];
std::pair<int,int>num[100001];
std::set<int>set;
bool cmp(std::pair<int,int> a,std::pair<int,int> b){return a.first<b.first||(a.first==b.first&&a.second>b.second);}
void update(int ind,int num){ans=add(ans,num);for(;ind<=lim;ind+=ind&-ind)c[ind]=add(c[ind],num);}
int query(int ind){int tot=0;for(;ind;ind-=ind&-ind)tot=add(tot,c[ind]);return tot;}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",x+i);
	for(int i=1,tem;i<=m;i++)scanf("%d",&tem),set.insert(tem);
	for(int i=1;i<=n;i++)
		if(x[i]>=*set.begin()&&x[i]<=*set.rbegin()&&!set.count(x[i]))
			num[++top]=std::make_pair(x[i]-*(--set.lower_bound(x[i])),*set.lower_bound(x[i])-x[i]);
	std::sort(num+1,num+top+1,cmp);
	top=std::unique(num+1,num+top+1)-num-1;
	for(int i=1;i<=top;i++)orig[(i<<1)-1]=num[i].first,orig[i<<1]=num[i].second;
	std::sort(orig+1,orig+(lim=(top<<1))+1);
	lim=std::unique(orig+1,orig+lim+1)-orig-1;
	for(int i=1;i<=top;i++){
		int N=std::lower_bound(orig+1,orig+lim+1,num[i].second)-orig;
		update(N,query(N-1)+1);
	}
	printf("%d\n",ans);
}