#include<bits/stdc++.h>
using namespace std;

const int N=200100,mod=1000000007;
typedef long long ll;
int b[N],inv[N],n,X,Y,fa[N],sz[N];
pair<int,int>a[N];

int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void U(int x,int y){fa[find(x)]=find(y);}


int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>X>>Y;inv[1]=1;
	for(int i=2;i<N;++i)inv[i]=mod-mod/i*(ll)inv[mod%i]%mod;
	for(int i=1;i<=n;++i)cin>>a[i].second>>a[i].first;
	sort(a+1,a+n+1);
	for(int i=n;i;--i)
		b[a[i].second]=i,fa[i]=i;
	for(int j=2;j<=n;++j){
		if(a[j].second!=a[1].second){
			for(int i=n;i;--i){
				if(i!=b[a[i].second]&&a[i].first+a[b[a[i].second]].first<=X)U(i,b[a[i].second]);
				else if(a[i].second!=a[1].second&&a[i].first+a[1].first<=Y)U(i,1);
				else if(a[i].second!=a[j].second&&a[i].first+a[j].first<=Y)U(i,1);
			}
			int ans=1;
			for(int i=1;i<=n;++i)
				if(find(i)==find(1)){
					ans=(ll)ans*(++sz[0])%mod;
					ans=(ll)ans*inv[++sz[a[i].second]]%mod;
				}
			cout<<ans<<'\n';
			return 0;
		}
	}
	cout<<1<<'\n';
	return 0;
}
