//MADE BY Y_is_sunshine;
//#include <bits/stdc++.h>
//#include <memory.h>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cassert>
#include <sstream>
#include <bitset>
#include <cstdio>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>

#define pb push_back
#define pf push_front
#define INF 0x3f3f3f3f
#define MAXN (int) 1e5 + 7
#define all(a) a.begin(), a.end()

#define pll pair<ll, ll> 
#define pil pair<int, ll>
#define pii pair<int, int>

typedef long long ll;

const ll mod = 1e9 + 7;
const double PI = acos(-1);

using namespace std;

int N, M, K, T;

int a[MAXN];
int b[MAXN];
int c[MAXN];

// 这个数字需要的数量
// 还未粉刷
int cntNeed[MAXN];
//  已经粉刷
int cnt[MAXN];
// 如果已经粉刷 可以跳过的那个数字
int jump[MAXN];

// 需要粉刷成这个颜色的标号
vector<int> v[MAXN];

signed main(void) {

#ifdef Sunshine
	freopen("data.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
#endif

	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.precision(20); cout << fixed;

	cin >> T;
	while (T--) {

		cin >> N >> M;

		for (int i = 1; i <= N; i++) {
			cin >> a[i];
			cnt[i] = 0;
			cntNeed[i] = 0;
			v[i].clear();
		}


		for (int i = 1; i <= N; i++) {
			cin >> b[i];
			if (a[i] != b[i]) {
				cntNeed[b[i]]++;
				v[b[i]].push_back(i);
			}
			else {
				cnt[b[i]]++;
				jump[b[i]] = i;
			}
		}

		for (int i = 1; i <= M; i++) {
			cin >> c[i];
		}

		// 正经刷
		// 如果有人救场！ 这块随便刷 浪费刷
		// 救场的人只能救前面的人的场
		// 如果存在这个颜色 相当于跳过此人

		vector<int> ans;
		// 多少需要救场
		int need = 0;

		for (int i = 1; i <= M; i++) {
			if (v[c[i]].size()) {
				// 可以救场
				int now = v[c[i]].back();
				while (need)
					need--, ans.push_back(now);


				// 正经刷
				ans.push_back(v[c[i]].back());
				cnt[c[i]]++;
				jump[c[i]] = v[c[i]].back();
				v[c[i]].pop_back();
				
			}
			else if (cnt[c[i]]) {

				// 可以救场
				int now = jump[c[i]];
				while (need)
					need--, ans.push_back(now);

				// 跳过此人
				ans.push_back(jump[c[i]]);
				

			}
			else {
				need++;
			}
		}

		if (need) {
			cout << "NO\n";
		}
		else {
			int all = 0;
			for (int i = 1; i <= N; i++) {
				all += v[i].size();
			}
			if (all)
				cout << "NO\n";
			else {
				cout << "YES\n";
				for (auto it : ans)
					cout << it << ' ';
				cout << '\n';
			}
		}


	}




















#ifdef Sunshine
	freopen("CON", "r", stdin);
	system("pause");
#endif
	return 0;
}
