#include using namespace std; typedef long long ll; template struct Hasher{ vector> val,pin; Hasher(vector const &s){ int const n=s.size(); int const m=s[0].size(); val=vector>(n,vector(m)); pin=vector>(n,vector(m)); ll inv1=1, inv2=1; ll sqr1=base1, sqr2=base2; for (ll i=mod-2; i; i>>=1){ if (i&1) (inv1*=sqr1)%=mod, (inv2*=sqr2)%=mod; (sqr1*=sqr1)%=mod; (sqr2*=sqr2)%=mod; } for (int i=0; i a; Hasher<191ll,569ll,16431563ll> b; Hasher<569ll,353ll,147483667ll> c; Collector(vector const &s): a(s), b(s), c(s) {} tuple describe(int x,int y,int w,int h){ return { a.describe(x,y,w,h), b.describe(x,y,w,h), c.describe(x,y,w,h)}; } }; int main(){ int wn,wm; cin>>wn>>wm; vector key(wn); for (auto &i: key) cin>>i; int cn,cm; cin>>cn>>cm; vector corpus(cn); for (auto &i: corpus) cin>>i; Collector word(key); Collector grid(corpus); auto const needle=word.describe(0,0,wn,wm); vector> good(cn,vector(cm)); for (int i=0; i