C++ 代码为什么只得了30分呢?

问题描述
第一行有 xx 个正整数 a1,a2,..,axa1,a2,..,ax ,

第二行有 yy 个正整数 b1,b2,...,byb1,b2,..,by ,

第三行有 zz 个正整数 c1,c2,...,czc1,c2,...,cz ,

假设第一行的 xx 个正整数中的最大值为 aa 、第二行的 yy 个正整数中的最大值为 bb 、第三行的zz 个正整数中的最大值为 cc , 输出 (a\times b\times c)%10007(a×b×c)%10007 的结果。

输入
第一行有 x+1x+1 个正整数,每个数之间一个空格分隔。第一个数表示整数的个数x,后面的x个数表示 a1,a2,...axa1,a2,...ax 。

第二行有 y+1y+1 个正整数,每个数之间一个空格分隔。第一个数表示整数的个数y,后面的y个数表示 b1,b2,...byb1,b2,...by 。

第三行有 z+1z+1 个正整数,每个数之间一个空格分隔。第一个数表示整数的个数z,后面的z个数表示 c1,c2,...czc1,c2,...cz 。

输出
一个整数 是 (a\times b\times c)%10007(a×b×c)%10007 的值。

样例
输入数据 1
3 2 1 3
4 5 3 2 1
2 1 2
输出数据 1
30
我的代码:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 10001;
int a[maxn], b[maxn], c[maxn];
int main(){
    int x, y, z;
    int max_x = -maxn, max_y = -maxn, max_z = -maxn;
    cin >> x;
    for(int i = 1; i <= x; i++) cin >> a[i];
    cin >> y;
    for(int i = 1; i <= y; i++) cin >> b[i];
    cin >> z;
    for(int i = 1; i <= z; i++) cin >> c[i];
    for(int i = 1; i <= x; i++){
        if(a[i] > max_x) max_x = a[i];
    }
    for(int i = 1; i <= y; i++){
        if(b[i] > max_y) max_y = b[i];
    }
    for(int i = 1; i <= z; i++){
        if(c[i] > max_z) max_z = c[i];
    }
    cout << (max_x * max_y * max_z) % 10007;
    return 0;
}

你这题我就看不懂啊 30分怎么了,满分多少

是不是有特殊用例报错了,比如某组数据输入了整数最大值,因此最后计算结果出错了这种情况