#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
#define lb(x) (x&-x)
#define mod 1000000007
#define mp make_pair
using namespace std;
typedef long long ll;
typedef pair<int,int> pr;
int n,m,ans=1,tot=0,tmp,t1,t2,t[500001],a[100001],b[100001],h[100001];
pr p[100001];
bool cmp(pr a,pr b){
	return a.first==b.first?a.second>b.second:a.first<b.first;
}
void add(int u,int x){
	for(;u<=n;u+=lb(u)){
		t[u]=(t[u]+x)%mod;
	}
}
int query(int u){
	int ret=0;
	for(;u;u-=lb(u)){
		ret=(ret+t[u])%mod;
	}
	return ret;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=m;i++)scanf("%d",&b[i]);
	for(int i=1;i<=n;i++){
		if(a[i]>b[1]&&a[i]<b[m]){
			tmp=lower_bound(b+1,b+m+1,a[i])-b;
			if(a[i]==b[tmp])continue;
			p[++tot]=pr(a[i]-b[tmp-1],b[tmp]-a[i]);
			h[tot]=b[tmp]-a[i];
		}
	}
	sort(h+1,h+tot+1);
	t1=unique(h+1,h+tot+1)-h-1;
	for(int i=1;i<=tot;i++){
		p[i].second=lower_bound(h+1,h+t1+1,p[i].second)-h;
	}
	sort(p+1,p+tot+1,cmp);
	t2=unique(p+1,p+tot+1)-p-1;
	for(int i=1;i<=t2;i++){
		tmp=query(p[i].second-1)+1;
		ans=(ans+tmp)%mod;
		add(p[i].second,tmp);
	}
	printf("%d",ans);
	return 0;
}