/*
Shorten the sub-sequence from both ends to obtain the minimum value.
*/
# Include <cstdio>
# Include <cstring>
# Include <map>
Using namespace std;
Int vis [1000001];
Int f [1000001];
Int n, m, k;
Int init ()
{
Memset (f, 0, sizeof (f ));
}
Int main ()
{
Init ();
Int t, count = 1;
Scanf ("% d", & t );
While (t --)
{
Memset (vis, 0, sizeof (vis ));
Scanf ("% d", & n, & m, & k );
If (k <= 3)
{
Printf ("Case % d: % d \ n", count ++, k );
Continue;
}
For (int I = 0; I <= 3; I ++)
F [I] = I;
Vis [1] = vis [2] = vis [3] = 1;
Int ans = 0, res = 3, mp = 11000000;
For (int l = 1, r = 4; r <= n; r ++)
{
F [r] = (f [r-1] + f [R-2] + f [r-3]) % m + 1;
If (! Vis [f [r])
{
Vis [f [r] = 1;
If (f [r]> = 1 & f [r] <= k)
Res ++;
}
Else
{
Vis [f [r] ++;
}
If (res = k)
{
Mp = min (mp, r-l + 1 );
}
While (l <= r)
{
If (f [l]> = 1 & f [l] <= k & vis [f [l] = 1)
Break;
Vis [f [l] --;
L ++;
If (res = k)
{
Mp = min (mp, r-l + 1 );
}
}
}
If (mp! = 11000000)
Printf ("Case % d: % d \ n", count ++, mp );
Else printf ("Case % d: sequence nai \ n", count ++ );
}
Return 0;
}