#include <iostream>
#include <algorithm>
#include <map>
#include <math.h>
#include <climits>
#include <string>
#include <set>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <functional>
#include <numeric>
#include <iostream>
#include <vector>
#include <numeric>
#include <string>
#include <functional>
#include <stdio.h>
#include <string.h>
#include <iomanip>
#include <numeric>//
#define ll long long
#define REP(i, n) for (ll i = 0; i < n; i++)
#define PER(i, n) for (ll i = n - 1; i >= 0; i--)
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define per(i, b, a) for (ll i = b; i >= a; i--)
#define mod 1000000007
#define ull unsigned long long
#define mem1(a)  memset(a,-1,sizeof(a))
#define mem0(a)  memset(a,0,sizeof(a))
#define sc second
#define fi first
#define pb push_back
#define all(x) (x).begin(),(x).end()
#define pll pair<ll,ll>
const long long INF=1e18;
using namespace std;
 
ll hcf(ll a, ll b)
{
    if (b == 0)
        return a;
    return hcf(b, a % b);
}
ull stringtoll(string s)
{
    ull ans = 0;
    for (ull i = 0; i < s.length(); i++)
        ans = ans *10 + (s[i] - '0');
    return ans;
}
 
vector<ll> root(ll n)
{
    vector<ll> ans;
    for (ll i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
        {
            ans.push_back(i);
            if (i != n / i)
                ans.push_back(n / i);
        }
    }
    return ans;
}
 
bool ifprime(ll n)
{
    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}
 
ll logat(ll n, ll base)
{
    return (log(n) / log(base));
}
 
ll factorial(ll n)
{
    if (n == 0)
        return 1;
    return (n* factorial(n - 1)) % mod;
}
 
void baspri(bool flag)
{
    if(flag)
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
}
//
//#define SIEVE
//const int N=100;
//vector<bool>prime(N,false);
//void sieve()
//{
//    prime[0]=false;
//    prime[1]=false;
//    for (int p = 2; p * p < N; p++)
//    {
//        if (prime[p] == true)
//        {
//            for (int i = p * p; i < N; i += p)
//                prime[i] = false;
//        }
//    }
//}
 
ll lcm(ll a, ll b)
{
    return (a / hcf(a, b)) * b;
}

int main()
{
 
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    #ifdef SIEVE
        sieve();
    #endif
    
    ll t;
    cin>>t;

    while(t--)
    {
        ll n,m;
        cin>>n>>m;
        
        vector<ll>a(n);
        vector<ll>b(n);
        vector<ll>pnt(m);

        map<ll,vector<ll>>op;
        map<ll,ll>another;
        
        REP(i,n)
            cin>>a[i];
        REP(i,n)
        {
            cin>>b[i];
            if(a[i]!=b[i])
                op[b[i]].push_back(i);
            else
                another[b[i]]=i;
        }
        REP(i,m)
            cin>>pnt[i];
        
        bool flag=true;
        ll idx=-1;
        vector<ll>ans(m);
        PER(i,m)
        {
            if(op.count(pnt[i]) && op[pnt[i]].size()>0)
            {
                ll jok=op[pnt[i]].back();
                op[pnt[i]].pop_back();
                ans[i]=jok;
                idx=jok;
            }
            else if(idx!=-1)
            {
                ans[i]=idx;
            }
            else if(another.count(pnt[i]))
            {
                ans[i]=another[pnt[i]];
                idx=ans[i];
            }
            else
            {
                flag=false;
                break;
            }
        }
        for(auto it=op.begin();it!=op.end();it++)
        {
            if(it->second.size()!=0)
                flag=false;
        }
        if(flag)
        {
            cout<<"YES"<<endl;
            
            REP(i,m)
                cout<<ans[i]+1<<" ";
            cout<<endl;
        }
        else
            cout<<"NO"<<endl;
        
    }
}
