fn main() {
    let stdin = std::io::stdin();
    let mut locked = stdin.lock();
    let mut scanner = Scanner::new(&mut locked);

    let s: Vec<Vec<i32>> = (0..2)
        .map(|_| {
            vec![0i32]
                .into_iter()
                .chain(scanner.next_bytes().unwrap().iter().scan(0, |a, x| {
                    *a += (x - b'A' + 1) as i32;
                    Some(*a)
                }))
                .collect()
        })
        .collect();

    (0..scanner.next_unsigned().unwrap())
        .map(|_| {
            let t: Vec<i32> = (0..2)
                .map(|i| {
                    let a = s[i][scanner.next_unsigned().unwrap() as usize - 1];
                    let b = s[i][scanner.next_unsigned().unwrap() as usize];
                    b - a
                })
                .collect();

            if (t[1] - t[0]) % 3 == 0 {
                println!("YES");
            } else {
                println!("NO");
            }
        })
        .count();
}

use std::io::{BufRead, Error, ErrorKind, Read};
use std::str::FromStr;

pub struct Scanner<'a, R>
where
    R: 'a + BufRead + ?Sized,
{
    reader: &'a mut R,
}

impl<'a, R> Scanner<'a, R>
where
    R: 'a + BufRead + ?Sized,
{
    pub fn new(reader: &'a mut R) -> Self {
        Scanner { reader: reader }
    }

    pub fn next_byte(&mut self) -> Result<u8, Error> {
        self.reader
            .bytes()
            .skip_while(|ref c| !Self::is_printable(*c.as_ref().ok().unwrap()))
            .next()
            .unwrap()
    }

    pub fn next_bytes(&mut self) -> Result<Vec<u8>, Error> {
        self.reader
            .bytes()
            .skip_while(|ref c| !Self::is_printable(*c.as_ref().ok().unwrap()))
            .take_while(|ref c| Self::is_printable(*c.as_ref().ok().unwrap()))
            .collect()
    }

    pub fn next_unsigned(&mut self) -> Result<u64, Error> {
        self.reader
            .bytes()
            .skip_while(|ref c| !Self::is_printable(*c.as_ref().ok().unwrap()))
            .take_while(|ref c| Self::is_printable(*c.as_ref().ok().unwrap()))
            .fold(Ok(0), |s, x| {
                s.and_then(|t| {
                    x.and_then(|y| {
                        if b'0' <= y && y <= b'9' {
                            Ok(t * 10 + (y - b'0') as u64)
                        } else {
                            Err(Error::new(ErrorKind::InvalidData, "found not a digit"))
                        }
                    })
                })
            })
    }

    pub fn next_signed(&mut self) -> Result<i64, Error> {
        self.reader
            .bytes()
            .skip_while(|ref c| !Self::is_printable(*c.as_ref().ok().unwrap()))
            .take_while(|ref c| Self::is_printable(*c.as_ref().ok().unwrap()))
            .fold(Ok([0i64, 0]), |s, x| {
                x.and_then(|y| {
                    s.and_then(|t| {
                        if t[0] == 0 && y == b'-' {
                            Ok([-1, 0])
                        } else if b'0' <= y && y <= b'9' {
                            Ok([
                                if t[0] == 0 { 1 } else { t[0] },
                                t[1] * 10 + (y - b'0') as i64,
                            ])
                        } else {
                            Err(Error::new(ErrorKind::InvalidData, "found not a digit"))
                        }
                    })
                })
            })
            .and_then(|s| Ok(s[0] * s[1]))
    }

    pub fn next_float(&mut self) -> Result<f64, Error> {
        self.reader
            .bytes()
            .skip_while(|ref c| !Self::is_printable(*c.as_ref().ok().unwrap()))
            .take_while(|ref c| Self::is_printable(*c.as_ref().ok().unwrap()))
            .collect::<Result<Vec<u8>, Error>>()
            .and_then(|t| {
                String::from_utf8(t).or(Err(Error::new(ErrorKind::InvalidData, "invalid data")))
            })
            .and_then(|s| {
                f64::from_str(&s).or(Err(Error::new(ErrorKind::InvalidData, "invalid data")))
            })
    }

    fn is_printable(c: u8) -> bool {
        0x21 <= c && c <= 0x7e
    }
}


Measured memory_bytes: 4604