#include <bits/stdc++.h>
using namespace std;
int main()
{
map< int , vector< int > > kx , ky ;
map< pair< int , int > , int > mp , pl ,pp ;
vector< pair< pair< int , int > , pair< int , int > > > ve ;
int n , m , q1 ;
cin >> n >> m >> q1 ;
ky[q1].push_back( m ) ;
kx[m].push_back( q1 );
ky[0].push_back( 0 ) ;
kx[0].push_back( 0 ) ;
for( int i = 0; i < n ; i ++ )
{
int a , b ;
string c ;
cin >> a >> b >> c ;
ky[b].push_back( a ) ;
kx[a].push_back( b );
pp[{ a , b }] = i + 1 ;
if( c == "/") mp[{ a , b }] = 1 ;
else mp[{ a , b }] = 2 ;
}
mp[{ m , q1 }] = 3 ;
for( auto i : ky )
{
sort( i.second.begin() , i.second.end() ) ;
ky[i.first ] = i.second ;
}
for( auto i : kx )
{
sort( i.second.begin() , i.second.end() ) ;
kx[i.first ] = i.second ;
}
int guang = 0 , ex = 0 , ey = 0 , lx = -1e7 , ly = -1e7 ;
bool res = false ;
while(1){
if( guang == 0 ) {
int k = ky[ey].size();
for (int i = 0; i < k ; i ++ )
{
if( ky[ey][i] == ex && i < k - 1 ){ ex = ky[ey][i+1] ; break ; }
}
}
if( guang == 1 ) {
int k = kx[ex].size();
for (int i = 0; i < k ; i ++ )
{
if( kx[ex][i] == ey && i < k - 1 ){ ey = kx[ex][i+1] ; break ; }
}
}
if( guang == 2 ) {
int k = ky[ey].size();
for (int i = 0; i < k ; i ++ )
{
if( ky[ey][i] == ex && i > 0 ){ ex = ky[ey][i-1] ; break ; }
}
}
if( guang == 3 ) {
int k = kx[ex].size();
for (int i = 0; i < k ; i ++ )
{
if( kx[ex][i] == ey && i > 0 ){ ey = kx[ex][i-1] ; break ; }
}
}
if( lx == ex && ly == ey ) break ;
if( mp[{ ex , ey }] == 3 ){ res = true ; break ; }
if( mp[{ ex , ey }] > 0 ) ve.push_back({{ guang , mp[{ ex , ey }] },{ ex , ey }});
if( mp[{ ex , ey }] == 1 ){
if( guang == 0 ) guang = 1 ;
else if( guang == 1 ) guang = 0 ;
else if( guang == 3 ) guang = 2 ;
else if( guang == 2 ) guang = 3 ;
}
if( mp[{ ex , ey }] == 2 ){
if( guang == 0 ) guang = 3 ;
else if( guang == 1 ) guang = 2 ;
else if( guang == 3 ) guang = 0 ;
else if( guang == 2 ) guang = 1 ;
}
if( pl[{ex,ey}] > 100 ) break;
pl[{ex,ey}] ++ ;
lx = ex , ly = ey ;
}
if( res ) cout << 0 << endl ;
vector< pair< int , int > > o ;
if( !res )
{
for (int j = 0; j < ve.size() ; j ++ )
{
guang = ve[j].first.first ;
if( ve[j].first.second == 1 )
{
if( guang == 0 ) guang = 3 ;
else if( guang == 1 ) guang = 2 ;
else if( guang == 3 ) guang = 0 ;
else if( guang == 2 ) guang = 1 ;
}
else
{
if( guang == 0 ) guang = 1 ;
else if( guang == 1 ) guang = 0 ;
else if( guang == 3 ) guang = 2 ;
else if( guang == 2 ) guang = 3 ;
}
ex = ve[j].second.first , ey = ve[j].second.second , lx = ex , ly = ey ;
while(1){
if( guang == 0 ) {
int k = ky[ey].size();
for (int i = 0; i < k ; i ++ )
{
if( ky[ey][i] == ex && i < k - 1 ){ ex = ky[ey][i+1] ; break ; }
}
}
if( guang == 1 ) {
int k = kx[ex].size();
for (int i = 0; i < k ; i ++ )
{
if( kx[ex][i] == ey && i < k - 1 ){ ey = kx[ex][i+1] ; break ; }
}
}
if( guang == 2 ) {
int k = ky[ey].size();
for (int i = 0; i < k ; i ++ )
{
if( ky[ey][i] == ex && i > 0 ){ ex = ky[ey][i-1] ; break ; }
}
}
if( guang == 3 ) {
int k = kx[ex].size();
for (int i = 0; i < k ; i ++ )
{
if( kx[ex][i] == ey && i > 0 ){ ey = kx[ex][i-1] ; break ; }
}
}
if( mp[{ ex , ey }] == 3 ){ o.push_back( { ve[j].second.first , ve[j].second.second }); }
if( lx == ex && ly == ey ) break ;
if( mp[{ ex , ey }] == 1 ){
if( guang == 0 ) guang = 1 ;
else if( guang == 1 ) guang = 0 ;
else if( guang == 3 ) guang = 2 ;
else if( guang == 2 ) guang = 3 ;
}
if( mp[{ ex , ey }] == 2 ){
if( guang == 0 ) guang = 3 ;
else if( guang == 1 ) guang = 2 ;
else if( guang == 3 ) guang = 0 ;
else if( guang == 2 ) guang = 1 ;
}
if( pl[{ex,ey}] > 100 ) break;
pl[{ex,ey}] ++ ;
lx = ex , ly = ey ;
}
}
int t = 0x3f3f3f3f ;
for (int k = 0; k < o.size() ; k ++ )
{
t = min( t , pp[ { o[k].first , o[k].second } ] ) ;
}
if( o.size() ) cout << t << endl ;
}
if( !o.size() && !res ) cout << -1 ;
return 0 ;
}