#include<bits/stdc++.h>
#define ll long long
using namespace std;
template<typename tn> void read(tn &a){
	tn x=0,f=1; char c=' ';
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	a=x*f;
}
const int N = 201000,mod = 1e9+7;
struct node{int x,y;}p[N];
int n,m,a[N],b[N],c[N],bx[N],by[N],cntx,cnty,tot;
vector<int> h[N];
void modify(int x,int k){
	for(int i=x;i;i-=i&-i) c[i]=(c[i]+k)%mod;
}
int query(int x){
	int ans=0;
	for(int i=x;i<=cnty+1;i+=i&-i) ans=(ans+c[i])%mod;
	return ans;
}
int main(){
	read(n);read(m);
	for(int i=1;i<=n;i++)
		read(a[i]);
	for(int i=1;i<=m;i++)
		read(b[i]);
	sort(a+1,a+n+1);
	sort(b+1,b+m+1);
	for(int i=1;i<=n;i++){
		int k=upper_bound(b+1,b+m+1,a[i])-b;
		if(k==1||k>m) continue;
		p[++tot]={b[k]-a[i],a[i]-b[k-1]};
		bx[++cntx]=p[tot].x;
		by[++cnty]=p[tot].y;
	}
	sort(bx+1,bx+cntx+1);
	sort(by+1,by+cnty+1);
	cntx=unique(bx+1,bx+cntx+1)-bx-1;
	cnty=unique(by+1,by+cnty+1)-by-1;
	for(int i=1;i<=tot;i++){
		p[i].x=lower_bound(bx+1,bx+cntx+1,p[i].x)-bx,
		p[i].y=lower_bound(by+1,by+cnty+1,p[i].y)-by;
		h[p[i].x].push_back(p[i].y);
	}
	modify(cnty+1,1);
	for(int i=cntx;i;i--){
		vector<pair<int,int> > V;
		sort(h[i].begin(),h[i].end());
		h[i].resize(unique(h[i].begin(),h[i].end())-h[i].begin());
		for(int y:h[i]) V.emplace_back(y,query(y+1));
		for(auto pr:V) modify(pr.first,pr.second);
	}
	cout<<query(1)<<'\n';
	return 0;
}
