// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx,avx2,fma")
// #pragma GCC optimization ("unroll-loops")
#include <bits/stdc++.h>
using namespace std;

/********************************************************************/
#define M1 1000000007
#define M3 1000000009
#define M2 998244353
#define ll long long
#define ld long double
#define pll pair<ll,ll>
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define repr(i,a,b) for(ll i=b-1;i>=a;i--)
#define forr(i,n) for(ll i=0;i<n;i++)
#define F first
#define S second
#define pb push_back
#define DB pop_back
#define mp make_pair
#define MT make_tuple
#define V(a) vector<a>
#define vi vector<ll>
#define endl '\n'
#define ce(ele) cout<<ele<<' '
#define cs(ele) cout<<ele<<'\n'
#define csv(v) for(int i=0;i<v.size();i++)cout<<v[i]<<' '
#define yep cout<<"YES"<<'\n'
#define nope cout<<"NO"<<'\n'
#define CASE(te) ll te; cin>>te; while(te--)
#define sor(v) sort(v.begin(),v.end())
#define rev(v) reverse(v.begin(),v.end())

/********************************************************************/
const double pi = 3.1415926535;
//const int mx = 69;
//char grid[mx][mx];
// ll blocked[mx][mx];
// ll vis[mx][mx];
/********************************************************************/
//FAST IO//
void FAST() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
}

/********************************************************************/

ll power(ll x,ll y,ll p) 
{ 
    ll res = 1; 
    x = x % p; 
    while (y > 0) 
    {  
        if (y & 1) 
         res = (res * x) % p; 
        y = y >> 1; 
        x = (x * x) % p; 
    } 
    return res; 
} 

bool isprime(ll n) 
{ 
    if (n <= 1) 
        return false; 
    if (n <= 3) 
        return true; 
    if (n % 2 == 0 || n % 3 == 0) 
        return false; 
    for (ll i = 5; i * i <= n; i = i + 6) 
        if (n % i == 0 || n % (i + 2) == 0) 
            return false; 
    return true; 
} 
  

vector<ll> digit(ll n)
{
    ll arr[10000];
    ll i=0;
    ll j,r;
    vi v;
    while(n!=0)
    {
        r = n % 10;
        arr[i] = r;
        i++;
        n = n / 10;
    }
    for(j=i-1;j>-1;j--)
    {
        v.pb(arr[j]);
    }
    return v;
}

ll sum(ll x) {
	ll ans = 0;
	while (x > 0) {
		ans += (x % 10);
		x /= 10;
	}
	return ans;
}

bool opp(int x, int y)
{
    return ((x ^ y) < 0);
}

struct compare { 
    bool operator()(const pair<int, int>& value,  
                                const int& key) 
    { 
        return (value.first <= key); 
    } 
    bool operator()(const int& key,  
                    const pair<int, int>& value) 
    { 
        return (key < value.first); 
    } 
};

bool bysec(const pair<int,int> &a, const pair<int,int> &b) 
{ 
    return (a.second < b.second); 
}

int main()
{
  FAST();
  CASE(te)
  {
      ll n,m;
      cin>>n>>m;
      ll a[n],b[n],c[m];
      vector<ll> diff[n+1];
      forr(i,n)
      cin>>a[i];
      forr(i,n)
      {
          cin>>b[i];
          if(b[i]!=a[i])
          diff[b[i]].push_back(i+1);
      }
      forr(i,m)
      {
          cin>>c[i];
          
      }
      ll last = c[m-1];
      ll ind = -1;
      for(int i=0;i<n;i++)
      {
          if(b[i]==last && b[i]!=a[i])
          {
              ind = i;
              break;
          }
      }
      if(ind == -1)
      {
            for(int i=0;i<n;i++)
            {
                if(b[i]==last)
                {
                    ind = i;
                    break;
                }
            }
      }
      vi ans;
      for(int i=0;i<m;i++)
      {
          if(diff[c[i]].size()==0)
          ans.push_back(-1);
          else
          {
              ans.push_back(diff[c[i]].back());
              diff[c[i]].pop_back();
          }
      }
      int f=0;
	  forr(i,n+1)
      {
        if(diff[i].size()>0)
        {
            f=1;
            break;
        }
	  }
		if(ind==-1 || f==1)
		nope;
		else
        {
			yep;
			for(auto i:ans){
				if(i==-1)
                ce(ind+1);
				else 
                ce(i);
			}
            cout<<"\n";
		}
        //cs(9999);
  }
}