#include #include #include //#include using std::vector; int lcs3(vector &a, vector &b, vector &c) { int l = c.size(); int m = b.size(); int n = a.size(); int D[n + 1][m + 1][l + 1]; for (int k = 0; k < l + 1; k++) { for (int j = 0; j < m + 1; j++) { for (int i = 0; i < n + 1; i++) { if (i == 0 || j == 0 || k == 0) { D[i][j][k] = 0; continue; } if (a[i - 1] == b[j - 1] && b[j - 1] == c[k - 1]) { D[i][j][k] = D[i - 1][j - 1][k - 1] + 1; } else { D[i][j][k] = std::max(D[i - 1][j][k], std::max(D[i][j - 1][k], D[i][j][k - 1])); } } } } return D[n][m][l]; } //TEST(LCS3, t1) { // vector a = { 1, 2, 3 }; // vector b = { 2, 1, 3 }; // vector c = { 1, 3, 5 }; // ASSERT_EQ(2, lcs3(a, b, c)); //} // //TEST(LCS3, t2) { // vector a = { 8, 3, 2, 1, 7 }; // vector b = { 8, 2, 1, 3, 8, 10, 7 }; // vector c = { 6, 8, 3, 1, 4, 7 }; // ASSERT_EQ(3, lcs3(a, b, c)); //} int main() { size_t an; std::cin >> an; vector a(an); for (size_t i = 0; i < an; i++) { std::cin >> a[i]; } size_t bn; std::cin >> bn; vector b(bn); for (size_t i = 0; i < bn; i++) { std::cin >> b[i]; } size_t cn; std::cin >> cn; vector c(cn); for (size_t i = 0; i < cn; i++) { std::cin >> c[i]; } std::cout << lcs3(a, b, c) << std::endl; }