This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define mod 998244353
#define int long long
#define endl '\n'
using namespace std;
using namespace __gnu_pbds;
using ordered_set = tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>;
int N,L,R;
int n,k,m;
int seg[2000000];
int slv(int l=1,int r=N,int in=1){
    if(r<L||l>R)return 1;
    if(l>=L&&r<=R)return seg[in];
    int mid=(l+r)/2;
    return (slv(l,mid,in*2)*slv(mid+1,r,in*2+1))%m;
}
void dod(int in){
    in+=N;
    seg[in]++;
    in/=2;
    while(in){
        seg[in]=(seg[in*2]*seg[in*2+1])%m;
        in/=2;
    }
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>k>>m;
    vector<pair<int,int>>v;
    vector<int>vct[k];
    vector<int>cnt(k);
    for(int i=0;i<n;i++){
        int a,b;
        cin>>a>>b;
        vct[b-1].push_back(a);
        v.push_back({a,b-1});
    }
    for(int i=0;i<k;i++){
        int cn=0,pr=0;
        for(auto &w:vct[i]){
            if(w>=pr*2){
                cn++;
                pr=w;
            }
        }
        cnt[i]=cn;
    }
    sort(v.begin(),v.end());
    N=exp2(ceil(log2(k)));
    for(int i=0;i<k;i++)seg[i+N]=1;
    for(int i=N-1;i;i--)seg[i]=(seg[i*2]*seg[i*2+1])%m;
    int ans=0,l=0;
    map<int,int>mp;
    for(int i=0;i<v.size();i++)mp[v[i].second]=i;
    for(int i=0;i<v.size();i++){
        while(v[i].first>=v[l].first*2){
            dod(v[l++].second);
        }
        if(mp[v[i].second]!=i)continue;
        int g=1;
        if(v[i].second>0){
            L=1,R=v[i].second;
            g*=slv();
        }
        if(v[i].second!=k-1){
            R=k+1;
            L=v[i].second+2;
            g*=slv();
        }
        ans+=g*cnt[v[i].second];
        ans%=m;
        // cout<<v[i].first<<' '<<v[i].second<<' '<<ans<<endl;
    }
    cout<<ans;
}
/*
0110
1100
*/
Compilation message (stderr)
fish.cpp: In function 'int main()':
fish.cpp:56:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     for(int i=0;i<v.size();i++)mp[v[i].second]=i;
      |                 ~^~~~~~~~~
fish.cpp:57:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |     for(int i=0;i<v.size();i++){
      |                 ~^~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |