#include <iostream>
#include <algorithm>
#include <sstream>
#include <vector>
using namespace std;


long long P;
int bit[100010];

void add(int x,long long v){
	x++;
	for(int i = x ; i < 100010 ; i += i&-i){
		bit[i] += v;
		bit[i] %= P;
	}
}
int get(int x){
	x++;
	long long ans = 0;
	for(int i = x ; i > 0 ; i -= i&-i){
		ans += bit[i];
		ans %= P;
	}
	return ans;
}
long long pow2[100010]={};

int solve(int A,int B,long long P){
	int ok = 0;
	for(int i = 1 ; i < (1<<(B-A+1)) ; i++){
		if( i != 1 ) continue;
		vector<int> ans;
		vector<string> ans2;
		for(int j = A ; j <= B ; j++){
			if( i >> (j-A) & 1 ){
				ans.push_back(j);
				stringstream ss;
				ss << j;
				ans2.push_back(ss.str());
			}
		}
		int f = 1;
		sort(ans.begin(),ans.end());
		sort(ans2.begin(),ans2.end());			
		for(int j = 0 ; j < ans.size() ; j++){
			stringstream ss(ans2[j]);
			int c;
			ss >> c;
			if( c != ans[j] ) f = 0;
		}
		if( f ) ok++;
	}
	return ok % P;
}
int solver2(long long A,long long B,long long P){
	for(int i = 0 ; i < 100010 ; i++)
		bit[i] = 0;
	pow2[0] = 1 % P;
	for(int i = 1 ; i < 100010 ; i++)
		pow2[i] = (pow2[i-1]*2ll)%P;
	
	vector<string> v;
	for(long long i = A ; i <= B ; i++){
		stringstream ss;
		ss << i;
		v.push_back(ss.str());
	}
	sort(v.begin(),v.end());
	long long ans = 0;
	for(int i = 0 ; i < v.size() ; i++){
		stringstream ss(v[i]);
		long long k;
		ss >> k;
		long long w = k - A;
		add(w,get(w)+1);
	}
	return get(100005);
}

int main(){
	long long A,B;

	while(cin >> A >> B >> P && A){
		cout << solver2(A,B,P)%P << endl;
	}
}